2011-03-27 6 views
0

CoreAnimationでNSViewの中心点を回転させるのに問題があります。私がしたいのは、その中心点を静的に保ちながらNSViewを回転させて、オブジェクトが回転するように見せるだけです。CoreAnimation setFrameCenterRotationが適切にアニメ化しない

私がこれを行う方法は、NSViewでanimatorプロパティを使用することです。コードは以下の通りである:

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

[[view animator] setFrameCenterRotation:45.0]; 

[NSAnimationContext endGrouping]; 

は私が回転しようとしています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)にしないでください。それはAppleの文書に明示されています。とにかく、回転アニメーションと同時に「NSViewAnimation」を実行すると、私の問題が発生します。 NSViewAnimationが同時に実行されるとき、アンカーポイントを設定することは何もしません!しかし、私がNSViewAnimationを実行しないと、正常に動作します。それがどうして起こっているのだろうか? – zanneth

+2

ありがとう、@ザネス!私も同様の問題を抱えていました。あなたのコメントは私にそれを解決するために必要な手がかりを与えました。私はimageViewのルートレイヤーを回転させていました。そのアンカーポイントは標準座標方向ごとに0,0、左下に読み出されます。 .5、.5に設定することもできますが、経験したように無視されます。画像とアニメーションの両方をサブレイヤに移動すると、私の問題が解決しました。ビューまたはそのルートレイヤーがアニメーション化されるたびに、anchorPointがノックアウトされるように見えます。あなたのプロジェクトでこれを回避できることを願っています。 – Wienke

+0

どのようにアニメーションを 'サブレイヤ'に移動しますか?私はアンカーポイントを0.5に設定することができますが、ビューは突然0,0の起点ですが中心に沿って 'ジャンプ'します。 – strange

関連する問題