2012-02-02 119 views
0

我想旋轉我的UIView子類的實例,然後用動畫對其進行縮放。不幸的是我的代碼在同一個動畫中旋轉和縮放。 如何在任何縮放動畫發生之前完成或強制旋轉?在動畫發生之前旋轉UIView

- (void) layoutSubviews { 
    self.transform = CGAffineTransformMakeRotation(myAngle); 

    // other layout... 
} 

- (void) showMyView { 
    [UIView setAnimationCurve:something]; 
    [UIView setAnimationDuration:somethingElse]; 

    self.layer.transform = CATransform3DMakeScale(x, y, z); 

    [UIView commitAnimations]; 
} 

回答

3

首先,蘋果推薦使用Block語法來製作動畫。
除此之外,它更容易實現你想要的。

首先爲您的旋轉製作動畫,如果完成,請製作縮放內容。
代碼示例:

[UIView animateWithDuration:0.5 
       animations:^{ 
        // This rotates the layer by 90° 
        self.layer.transform = CGAffineTransformMakeRotation(M_PI/2.0); 
       } 
       // On completition start the scaling 
       completion:^(BOOL finished){ 
        if (finished) { 
         [UIView animateWithDuration:0.5 
              animations:^{ 
               // This scales 
               self.layer.transform = CGAffineTransformMakeScale(2.0, 2.0); 
              } 
          ]; 
        } 
       } 
    ]; 

也可以與您使用的「老字號」動畫風格,但它實現起來更復雜動畫的代表等等

+0

啊好主意。在上面的代碼中,第一個動畫持續時間可以是零? – SundayMonday 2012-02-03 00:29:42

+1

是的,但在這種情況下,您實際上不需要爲其製作動畫。 只需將旋轉添加到視圖中,然後再開始第二個動畫。 – yinkou 2012-02-03 01:02:24