Ich machte mich daran, ein NSImageView zu transformieren. Mein zunächst Versuch warLayer-unterstützte NSView-Probleme in viewDidLoad
self.imageView.wantsLayer = YES;
self.imageView.layer.transform = CATransform3DMakeRotation(1,1,1,1);
Leider bemerkte ich, dass die manchmal (vielleicht einmal alle 5 Läufe) nur geschieht verwandeln. Das Hinzufügen eines NSLog zwischen bestätigt, dass bei einigen Läufen self.imageView.layer
null ist. Der Status des gesamten Projekts wird auf dem Bild unten angezeigt.
Es ist ein unglaublich einfaches 200x200 NSImageView mit einem Auslass zu einem erzeugten NSViewController. Einige Experimente zeigten Einstellungen wantsDisplay behebt das Problem nicht, aber wenn man die Transformation auf einen NSTimer setzt, funktioniert es jedes Mal. Ich würde eine Erklärung dafür lieben, warum dies passiert (ich nehme an, dass es aufgrund einer Race-Bedingung ist).
Ich benutze Xcode 8 auf dem MacOS 10.12, aber ich bezweifle, dass dies die Ursache des Problems ist.
aktualisieren
wantsLayer
aus- und wie verrückt Core Animation Layers im Interface Builder ermöglicht nicht das Problem beheben.
Weder haben versucht es zu animieren (ich war nicht sicher, was ich gehofft hatte)
// 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");
}];
oder
// 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];