2016-07-24 11 views
1

NSImageViewを変換するように設定しました。私の当初の試みはviewDidLoadのレイヤーバックアップNSViewの問題

self.imageView.wantsLayer = YES; 
self.imageView.layer.transform = CATransform3DMakeRotation(1,1,1,1); 

た残念ながら、私は、変換だけ時々を(多分一度5つのラン)が起こることに気づきました。その間にNSLogを追加すると、ある実行で確認されたことがあるself.imageView.layerはnullです。プロジェクト全体の状態が下の画像に示されています。

Project state

これは、生成されたNSViewControllerへの出口と信じられないほど簡単な200x200のNSImageViewです。いくつかの実験では、wantsDisplayは問題を解決していない設定を示していましたが、NSTimerに変換を置くと、毎回動作するようになりました。私はなぜこれが起こるかの説明が好きです(私はそれが何らかの競合状態にあると推測します)。

私はMacOS 10.12でXcode 8を使用していますが、これが原因であるかどうかは疑問です。

更新

wantsLayerの取り外しと狂っていなかった問題を修正Interface BuilderでのCore Animationレイヤを有効にします。

Ticked core animation layers

は、どちらも私は可能性があります実現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]; 

答えて

0

もしませんでしたあまりにも早くアニメーション化しようとしている。

変換コードをviewDidAppearに移動するたびに機能しました。

- (void)viewDidAppear { 
    [super viewDidAppear]; 
    self.imageView.animator.layer.transform = CATransform3DMakeRotation(1,1,1,1); 
}