2012-04-04 75 views
0

我正在使用簡單的CABasic Animation來旋轉視圖中的圖像。當用戶觸摸圖像時,開始觸摸以允許旋轉開始。然後在用戶完成旋轉圖像時調用結束。CABasic Animation Rotation

一旦觸摸結束我然後再次旋轉圖像到一個固定點。這裏的代碼

CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

double startRotationValue = 0; 
rotation.fromValue = [NSNumber numberWithDouble:startRotationValue]; 
rotation.toValue = [NSNumber numberWithDouble:startRotationValue+0.25]; 
rotation.duration = 1.0; 
rotation.fillMode = kCAFillModeForwards; 
rotation.removedOnCompletion = NO; 

[self.view.layer addAnimation:rotation forKey:@"rotating"]; 

這工作正常,直到第二次選擇圖像。開始的觸摸被再次調用,但圖像無法旋轉。事實上,圖像不能在所有的移動我知道這是什麼做

rotation.fillMode = kCAFillModeForwards; 
rotation.removedOnCompletion = NO; 

我試圖打電話給removedOnCompletion在潤色開始不解決問題。

rotation.removedOnCompletion = YES 

這是什麼最好的辦法,不知何故視圖沒有正確註冊rotation.removedOnCompletion。

回答

1

首先,你一般不應該混淆fillModeremovedOnCompletion。完全刪除這些。那些告訴你惹惱他們的人幾乎總是在糾正錯誤的問題。

他們要解決的問題是,當動畫完成並被刪除時,對象會「回退」到其舊位置。原因是你從來沒有真正在模型上設置價值。這會在以後造成各種令人討厭的問題。

這一行後:

[self.view.layer addAnimation:rotation forKey:@"rotating"]; 

地址:

self.view.layer.transform.rotation = startRotationValue + 0.25; 

(您可能需要使用一個臨時變量在這裏舉行transform,修改它,然後將其設置回我一般。請勿自己使用rotation屬性。)

這將設置底層模型圖層,以便它與動畫的最終狀態相匹配。

+0

有趣的是,這裏的很多帖子都提到使用fillmode和removeOnCompletion來避免動畫回彈到開始位置。我會試驗轉換以避免相同的情況,謝謝。 – user494088 2012-04-04 08:36:52