2011-03-27 114 views
0

我在獲取CoreAnimation旋轉關於其中心點的NSView時遇到了一些麻煩。我想要做的就是旋轉一個NSView,同時保持其中心點靜止,以便該對象看起來在原地旋轉。CoreAnimation setFrameCenterRotation不能正確動畫

我選擇這樣做的方式涉及在NSView中使用animator屬性。代碼如下:

[NSAnimationContext beginGrouping]; 
[[NSAnimationContext currentContext] setDuration:1.0]; 

[[view animator] setFrameCenterRotation:45.0]; 

[NSAnimationContext endGrouping]; 

哪裏view的是,我想旋轉的NSView。這段代碼的結果使得對象在某種程度上突然向右移動,然後進行旋轉。最終的結果是正確的,但由於它在一開始就進行了移動,所以動畫看起來不正確。我假設這是因爲setFrameCenterRotation:的工作原理是它首先將幀原點轉移到視圖的中心點,然後進行旋轉。

我在這裏做錯了什麼?有沒有更好的方法來旋轉關於中心的NSView?非常感謝!

回答

1

首先確保NSView層支持(啓用核心動畫),否則動畫製作者代理會在沒有CA的情況下進行動畫製作。使用-setWantsLayer:YES或通過在IB中檢查該視圖的相應選項來執行此操作。

二,層錨點設置爲0.5,0.5:

view.layer.anchorPoint = CGPointMake(0.5,0.5); 

第三,你可能需要直接的層互動,如果你不能得到你想要的東西,但先用了AppKit API的嘗試,因爲它保留鼠標事件等。

+1

感謝您的回答,但似乎我有另一個問題。該層的anchorPoint肯定是問題的根源,但不應該(0.5,0.5)默認?它在蘋果的文檔中如此明確地表示。無論如何,我的問題現在發生在我有一個'NSViewAnimation'與旋轉動畫同時運行的時候。當NSViewAnimation同時運行時,設置錨點什麼也不做!但是當我不運行NSViewAnimation時,它工作正常。任何想法爲什麼可能會發生? – zanneth 2011-03-27 23:27:00

+2

謝謝@Zanneth!我遇到了類似的問題,您的評論給我提供瞭解決問題的必要線索。我正在旋轉imageView的根層。其anchorPoint按照標準座標方向在0,0,左下方讀出。我可以將它設置爲.5,.5,但它會被忽略,就像你經歷過的一樣。移動圖像和動畫到子圖層解決了我的問題。顯然,每當一個視圖或其根層動畫時,就會敲掉anchorPoint。希望你能夠在你的項目中解決這個問題。 – Wienke 2011-04-17 14:33:50

+0

如何將動畫移動到「子圖層」?我可以將定位點設置爲0.5,但是然後視圖突然'跳'到0,0原點,但與其中心一起。 – strange 2012-07-03 22:15:52