2011-09-02 6 views
2

NSView (NSButton)의 내용을 내부에서 회전하려고합니다 (중심에서 바깥쪽으로 -|으로 변환하고 싶습니다). 이것은 다시 왼쪽 아래 (0,0) 중심으로 회전 한 후 setFrameCenterRotation:이 ... 그러나, 나는이 애니메이션을 위해 노력하고있어 함께 할, 그리고NSView 내용의 애니메이션 회전

[[myview animator] setFrameCenterRotation: 90]; 

은 오른쪽 첫번째 점프에 컨트롤이 발생 될 수 있습니다 원래 위치로

어떤 사람들은 처음 설정 제안 anchorPoint :

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

하지만 어떤 이유로 애니메이션이를 취소하고이 재설정됩니다

(0, 0).

따라서, NSView의 전체 회전을 애니메이션하는 방법을 알아 낸 사람이 있습니까?

답변

1

인터페이스 작성기에서 컨트롤을 추가하고 IBOutlet을 사용하여 회전하는 경우에는 이러한 일이 발생하지 않습니다. "setAnchorPoint :"메서드를 사용할 필요가 없습니다. "setFrameCenterRotation :"메서드 자체가 작동합니다. 그러나 NSCell에있는 NSButton을 서브 뷰로 회전하려고 할 때도 똑같은 일이 발생했습니다. 솔루션은 controlView (아래의 NSCell 하위 클래스 참조)에서 NSView를 하위 뷰로 사용하고 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); 


}