2011-01-05 76 views
3

我是新來的核心animationI我在以前的文章中立足這一點:spin image clockwise/anticlockwise on touchiPhone/iPad的微調,以保持動畫

可能是一個基本的問題,但我只是想圓旋轉一定的距離,然後停止。當動畫結束時,它將恢復到原始位置。

如何讓項目保留在動畫結束時的位置?


我真正想要的是自由浮動的輪子響應用戶刷卡。當用戶向車輪左側滑動時,車輪旋轉到左側。根據刷卡的速度,車輪旋轉更快,然後開始減速。如果有人能夠就此提出一些提示或指示,我會非常感激。 alt text

+5

這是你在那裏創建的一個令人敬畏的微調。 :) – 2011-01-05 17:04:45

回答

3

這是混亂與核心動畫公共點。 A CAAnimation實際上並未更改圖層的後備「模型」屬性。它只是改變了圖層對用戶的顯示方式。所以你的toValue從來沒有設置在你的圖層上,你需要自己做。您可以在動畫開始之前或之後執行此操作。您的新值將被設置,但用戶在動畫結束之前不會看到它。一個人爲的例子:

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform"]; 
rotate.fromValue = [NSValue valueWithCATransform3D:myLayer.transform]; 
rotate.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f)]; 
rotate.duration = .5f; 

myLayer.transform = CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f); 
[myLayer addAnimation:rotate forKey:@"transform"]; 

兩個重要的部分是設置在該層上的性質和使用該屬性名作爲在addAnimation:forKey:鍵。不要擔心隱式動畫。在內部,CALayer將其所有動畫保存在以屬性名稱爲關鍵字的字典中,並且當您添加新動畫時,它將取消並替換指定鍵/屬性的任何現有動畫。

此外,我不能告訴你是否需要滑動手勢的幫助,但如果你還沒有,你應該檢查出UIPanGestureRecognizer。它提供了一個方便的方法,它將爲您提供一個以每秒點數表示的平移方向的二維矢量。我有一些gesture recognizer sample code up on github可能會有所幫助。

+0

那麼,你將如何設置圖層上的旋轉。在這裏,你正在設置不透明度。如果你在PanGesture上有一些示例代碼,那就太好了。 – smcdrc 2011-01-06 03:18:28

+0

我以爲你剛剛在最後動畫復原時遇到了麻煩。你可以使用'transform'屬性來代替'opacity'。我編輯我的示例來旋轉而不是淡入淡出。我還添加了一些鏈接到一些手勢識別器的例子。 – 2011-01-06 04:12:45

+0

完美,謝謝。我正在四處尋找需要更改的內容,但無法找出設置旋轉的位置。 – smcdrc 2011-01-06 13:59:51

2

(順便說一句,這是一個真棒實現。)

你需要指定兩個屬性:填充模式和刪除完成:

animation.fillMode = kCAFillModeForwards; 

確定接收的 演示文稿被凍結或刪除一次 其活動持續時間已完成。 這些常量決定了當定時對象的有效持續時間完成後,定時對象的行爲。

animation.removedOnCompletion = NO; 

確定如果動畫從目標層的動畫 完成後除去 。

從Apple文檔:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html%23//apple_ref/occ/cl/CAAnimation