Окружающая среда: OS X 10.11 SDK, XCode 7.2, Cocoa;Преобразование CALayer не применяется, если NSView еще не создан в данный момент
Контекст: Некоторая сложная трансформация должна применяться в момент создания представлений;
Когда я пытаюсь добавить NSView программно преобразовать свойство просто игнорируется, если он помещен перед addSubview
вызова:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
CALayer* newLayer = [CALayer layer];
newLayer.transform = CATransform3DMakeRotation(angle, 0.1f, 0.1f, 0.1f);
[newLayer setBackgroundColor:[[NSColor greenColor] CGColor]];
[view setLayer:newLayer];
[view setWantsLayer:YES];
[_window.contentView addSubview:view];
}
- (IBAction)click:(id)sender {
angle += 0.1f;
[[_window.contentView subviews] objectAtIndex:2].layer.transform = CATransform3DMakeRotation(angle, 0.1f, 0.1f, 0.1f);
CATransform3D t = [[_window.contentView subviews] objectAtIndex:2].layer.transform;
[[_window.contentView subviews] objectAtIndex:2].layer.edgeAntialiasingMask = !CATransform3DIsIdentity(t);
}
Если я нажимаю на кнопку, вид будет вращаться в нем должен. Кроме того, применяя преобразование после добавления вида в окно тоже работаешь:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
CALayer* newLayer = [CALayer layer];
[newLayer setBackgroundColor:[[NSColor greenColor] CGColor]];
[view setLayer:newLayer];
[view setWantsLayer:YES];
[_window.contentView addSubview:view];
view.layer.transform = CATransform3DMakeRotation(angle, 0.1f, 0.1f, 0.1f);
}
ли я пропустить некоторые требования или просто не понял, как CALayer преобразования работает?
Есть ли здесь вопрос где-нибудь или вы пытаетесь подать отчет об ошибке, разместив на нем SO? – bhaller
@bhaller Добавил вопрос. Я не думаю, что это ошибка, просто отсутствие знаний. – unknownexception
Если уровни OS X работают так, как работают слои iOS, это вполне ожидаемое поведение. – matt