NSImageViewを変換するように設定しました。私の当初の試みはviewDidLoadのレイヤーバックアップNSViewの問題
self.imageView.wantsLayer = YES;
self.imageView.layer.transform = CATransform3DMakeRotation(1,1,1,1);
た残念ながら、私は、変換だけ時々を(多分一度5つのラン)が起こることに気づきました。その間にNSLogを追加すると、ある実行で確認されたことがあるself.imageView.layer
はnullです。プロジェクト全体の状態が下の画像に示されています。
これは、生成されたNSViewControllerへの出口と信じられないほど簡単な200x200のNSImageViewです。いくつかの実験では、wantsDisplayは問題を解決していない設定を示していましたが、NSTimerに変換を置くと、毎回動作するようになりました。私はなぜこれが起こるかの説明が好きです(私はそれが何らかの競合状態にあると推測します)。
私はMacOS 10.12でXcode 8を使用していますが、これが原因であるかどうかは疑問です。
更新
wantsLayer
の取り外しと狂っていなかった問題を修正Interface BuilderでのCore Animationレイヤを有効にします。
は、どちらも私は可能性があります実現allowsImplicitAnimationで実験した後、それをアニメーション化しようとする試み(私は私が望んでいたかわからなかった)
// Sometimes works.. doesn't animate
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
context.duration = 1;
self.imageView.animator.layer.transform = CATransform3DMakeRotation(1,1,1,1);
} completionHandler:^{
NSLog(@"Done");
}];
または
// Animates but only sometimes
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(1,1,1,1)];
animation.duration = 1;
[self.imageView.layer addAnimation:animation forKey:nil];