为什么一个CATransform3DMakeRotation不采取(0,0,1)作为绕Z轴旋转?(W

2019-09-22 09:24发布

如果我做一个转变成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然后更新transformupdate方法中,然后使用

-(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的方法?

Answer 1:

原来的观点需要被添加到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?