如果我做一个转变成NSView
在可可的应用程序:
self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 0, 0, 1);
我看到周围的Z轴方不旋转,但旋转,如果该矢量被向下并向外指向。 我需要使它
self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 1, 1, 1);
以使其绕Z轴,如图上的图片这个问题 。
然而,如果设置了一个NSTimer
然后更新transform
在update
方法中,然后使用
-(void) update:(id) info {
self.view.layer.transform =
CATransform3DMakeRotation(self.degree * M_PI / 180, 0, 0, 1);
self.degree += 10;
}
(此时,使用(0, 0, 1)
将工作:它围绕Z轴旋转。 我不知道为什么(1, 1, 1)
需要内部applicationDidFinishLaunching
,但(0, 0, 1)
可以在使用update
的方法?
原来的观点需要被添加到window.contentView
第一:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 200, 200)];
[self.window.contentView addSubview:self.view];
self.view.wantsLayer = YES;
self.view.layer = [CALayer layer];
self.view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
self.view.layer.anchorPoint = CGPointMake(0.5, 0.5);
self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 0, 0, 1);
}
另外,线self.view.layer = [CALayer layer];
需要是线后self.view.wantsLayer = YES;
。 为什么这些订单,我不知道,但它的作品,因为它应该。 我找不到提到要求该订单还没有这个文档中,上述工程的代码。 当我找到为什么需要顺序的更多信息,我会更新的答案。
文章来源: Why does a CATransform3DMakeRotation not take (0,0,1) as rotating around the Z-axis?