Я отправился преобразовать NSImageView. Моя первоначально попытка былаСложные проблемы NSView в представленииDidLoad
self.imageView.wantsLayer = YES;
self.imageView.layer.transform = CATransform3DMakeRotation(1,1,1,1);
К сожалению, я заметил, что преобразование происходит только иногда (может быть, один раз каждые 5 прогонов). Добавление NSLog между подтверждением того, что на некоторых прогонах self.imageView.layer
равно null. Состояние всего проекта показано на изображении ниже.
Это невероятно простой 200x200 NSImageView с выходом на генерируемый NSViewController. Некоторые эксперименты показали, что настройки хотят. Дисплей не устраняет проблему, но включение преобразования в NSTimer заставляет его работать каждый раз. Мне хотелось бы объяснить, почему это происходит (я полагаю, это связано с некоторыми условиями гонки).
Я использую Xcode 8 на macOS 10.12, но я сомневаюсь, что это является причиной проблемы.
Update
Удаление wantsLayer
и безумно позволяя Core Animation Layers в Interface Builder не решить эту проблему.
Ни делали попытки оживить его (я не был уверен, что я надеялся)
// 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];