2012-04-14 105 views
2

我有簡單的旋轉變換,結合alpha,它在第一次調用時完美運行,但旋轉不會在第二次發生(用戶通過點擊屏幕啓動此動畫)。iOS5 CGAffineTransformMakeRotation第二次不工作嗎?

這裏是我的動畫的基本功能:

- (void) animateMe:(UIImageView *)myImage delay:(NSTimeInterval)dly 
{ 
    [UIView animateWithDuration:1.0 
          delay:dly 
         options:UIViewAnimationOptionAutoreverse 
        animations:^(void){ 
         myImage.alpha = 1.0; 
         myImage.transform = CGAffineTransformMakeRotation(180.0); 
        } 
        completion:^(BOOL finished) { 
         myImage.alpha = 0.0; 
        }]; 
} 

回答

7

的問題是,要旋轉視圖中的第二次,它已經被180度線旋轉:

myImage.transform = CGAffineTransformMakeRotation(180.0); 

相當於:

myImage.transform = myImage.transform; 

所以你應該這樣做:

myImage.transform = CGAffineTransformRotate(myImage.transform, 180.0); 

注意,documentation說,旋轉角度應該是一個弧度不度。所以你可能應該使用M_PI而不是180.0

而且,請注意,documentationUIViewAnimationOptionAutoreverse必須UIViewAnimationOptionRepeat相結合。

UIViewAnimationOptionAutoreverse

運行動畫向後和向前。必須與UIViewAnimationOptionRepeat選項結合使用。

+0

謝謝,這非常有幫助!我會嘗試給你的建議,並分配檢查它是否有效,聽起來你可能是對的。非常驚訝他們會使用弧度 - 這似乎是一個尷尬的方式來做到這一點,但我明白這就是文檔所說的。 – 2012-04-14 21:13:26

+0

好的,我花了一點時間才意識到CGAffineTransformRotate()與CGAffineTransformMakeRotation()是不同的函數!您的建議有效,謝謝。你的鏈接非常有幫助,我正在學習很多關於仿射變換的知識。 – 2012-04-15 01:45:33

+0

一個額外的評論,我一直在閱讀塊動畫的文檔,它說,你可以指定一個重複計數與UIViewAnimationOptionAutoReverse結合使用 - 它不需要與UIViewAnimationAutoRepeat結合使用。 – 2012-04-19 14:59:52