2012-09-13 24 views
1

如果我變換到NSView可可的應用程序:爲什麼CATransform3DMakeRotation在繞Z軸旋轉時不能取(0,0,1)?

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軸,如圖所示畫面上this question

然而,如果我設置在update方法的NSTimer,然後更新transform,然後使用

-(void) update:(id) info { 
    self.view.layer.transform = 
        CATransform3DMakeRotation(self.degree * M_PI/180, 0, 0, 1); 
    self.degree += 10; 
} 

(此時,利用(0, 0, 1))將工作:它繞Z軸。我想知道爲什麼applicationDidFinishLaunching裏面需要(1, 1, 1),但是(0, 0, 1)可以用在update的方法中嗎?

回答

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;之後的行。爲什麼這些順序,我不確定,但它的工作原理應該如此。我無法找到提及此訂單要求的文檔,但上面的代碼正常工作。當我找到更多關於爲什麼需要訂單的信息時,我會更新答案。