注意:これは、iOSではなくOSX上のCocoaアプリ用です。
レイヤーでバックアップされたNSButton(NSViewのサブクラス)があります。私がやりたいのは、CoreAnimationを使用してそのボタンを回転させることです。私はそれを行うために次のコードを使用しています:
CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
a.fromValue = [NSNumber numberWithFloat:0];
a.toValue = [NSNumber numberWithFloat:-M_PI*2];
[_refreshButton.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
a.duration = 1.8; // seconds
a.repeatCount = HUGE_VAL;
[_refreshButton.layer addAnimation:a forKey:nil];
これは、実行時にレイヤーが左下にジャンプして、その中心点がNSViewの原点((0,0)の左下隅)になることを除いて機能します。次に、レイヤーはその中心を中心に回転しますが、明らかに左下隅へのジャンプは受け入れられません。
したがって、よく読んだ後、10.8APIリリースノートでこの行を見つけました。
On 10.8, AppKit will control the following properties on a CALayer
(both when "layer-hosted" or "layer-backed"): geometryFlipped, bounds,
frame (implied), position, anchorPoint, transform, shadow*, hidden,
filters, and compositingFilter. Use the appropriate NSView cover methods
to change these properties.
これは、AppKitが上記のコードで-setAnchorPointへの呼び出しを「無視」し、代わりに、そのアンカーポイントをNSViewの原点(0,0)に設定していることを意味します。
私の質問は:どうすればこれを解決できますか?レイヤーのanchorPointを設定するための「適切なNSViewカバーメソッド」とは何ですか(NSViewでそのようなメソッドを見つけることができません)。一日の終わりに、ボタンを中心点を中心に無期限に回転させたいだけです。