2011-09-02 61 views
2

我試圖旋轉NSViewNSButton)中的內容(即從中心開始,我想將-轉換爲|)。這可以用setFrameCenterRotation: ......不過,我想這個動畫來完成,並NSView內容的動畫旋轉

[[myview animator] setFrameCenterRotation: 90]; 

使控制先跳到右側,然後周圍的左下角(0,0)旋轉回到原來的位置。

有人提出首先設置anchorPoint

[[myview layer] setAnchorPoint: NSMakePoint(0.5, 0.5)]; 

但由於某些原因動畫抵消了這一點,它會復位爲(0,0)。

那麼,有沒有人想出瞭如何動畫NSView的就地旋轉?

回答

1

如果您從界面構建器添加控件並使用其IBOutlet旋轉它,則不會發生這種情況。您不必使用「setAnchorPoint:」方法; 「setFrameCenterRotation:」方法本身將工作。然而當我試圖旋轉NSCell中的NSButton作爲子視圖時,同樣的事情發生在我身上。解決方法是在controlView中有一個NSView作爲子視圖(參考下面的NSCell子類),NSButton需要旋轉作爲新的NSView的子視圖。

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{ 

    if (![btnCheckBackView superview]) { 
     //btnCheckBackView is my NSView holding the NSButton "btnCheck" 
     [btnCheckBackView setFrame:NSRectFromCGRect(CGRectMake(9, cellFrame.origin.y+8, 28, 28))]; 
     [controlView addSubview:btnCheckBackView]; 
     if (![btnCheck superview]) { 
      [btnCheck setFrame:NSRectFromCGRect(CGRectMake(0, 0, 28, 28))]; 
      [btnCheckBackView addSubview:btnCheck]; 

     } 
    } 




// NSLog(@"drawWithFrame"); 
// NSLog(@"Rect %d,%d,%d,%d",(int)cellFrame.origin.x,(int)cellFrame.origin.y,(int)cellFrame.size.width,(int)cellFrame.size.height); 
// NSLog(@"controlView %d,%d,%d,%d",(int)controlView.frame.origin.x,(int)controlView.frame.origin.y,(int)controlView.frame.size.width,(int)controlView.frame.size.height); 


}