1

NSViewCocoa のアプリで に変換すると:

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

4

1 に答える 1

2

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;。なぜこれらの順序が正しいのかはわかりませんが、想定どおりに機能します。この注文の要件について言及しているドキュメントはまだ見つかりませんが、上記のコードは機能します。注文が必要な理由についての情報が見つかり次第、回答を更新します。

于 2012-09-15T04:42:00.083 に答える