1
我開始轉換NSImageView。我最初的嘗試是層支持的NSView問題viewDidLoad
self.imageView.wantsLayer = YES;
self.imageView.layer.transform = CATransform3DMakeRotation(1,1,1,1);
不幸的是我注意到,只發生有時(也許每5只運行一次)的變換。之間添加一個NSLog確認在某些運行self.imageView.layer
爲空。整個項目的狀態如下圖所示。
這是一個令人難以置信的簡單200x200的NSImageView具有出生成NSViewController。一些實驗顯示設置wantsDisplay不能解決問題,但將轉換放在NSTimer上使其每次都能正常工作。我很樂意解釋爲什麼會發生這種情況(我認爲這是由於一些競賽狀況)。
我在macOS 10.12上使用Xcode 8,但我懷疑這是問題的原因。
更新
刪除wantsLayer
和瘋狂讓Interface Builder中的Core Animation層並沒有解決問題。
也沒有嘗試製作動畫(我不知道我所期待的)
// 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];