2016-07-24 50 views
1

我開始轉換NSImageView。我最初的嘗試是層支持的NSView問題viewDidLoad

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

不幸的是我注意到,只發生有時(也許每5只運行一次)的變換。之間添加一個NSLog確認在某些運行self.imageView.layer爲空。整個項目的狀態如下圖所示。

Project state

這是一個令人難以置信的簡單200x200的NSImageView具有出生成NSViewController。一些實驗顯示設置wantsDisplay不能解決問題,但將轉換放在NSTimer上使其每次都能正常工作。我很樂意解釋爲什麼會發生這種情況(我認爲這是由於一些競賽狀況)。

我在macOS 10.12上使用Xcode 8,但我懷疑這是問題的原因。

更新

刪除wantsLayer和瘋狂讓Interface Builder中的Core Animation層並沒有解決問題。

Ticked core animation layers

也沒有嘗試製作動畫(我不知道我所期待的)

// 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

與allowsImplicitAnimation試驗後,我意識到我可能試圖過早動畫。

將變換代碼移動到viewDidAppear使其每次都能正常工作。

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