我正在尝试就地旋转 NSView
(NSButton
) 的内容(即从中心旋转。我想转换 -
转换为 |
)。这可以通过 setFrameCenterRotation: 来完成...但是,我正在尝试为其设置动画,并且
[[myview animator] setFrameCenterRotation: 90];
使控件首先跳转到右侧,然后绕左下角 (0,0) 旋转回到原始位置。
有些人建议首先设置anchorPoint
:
[[myview layer] setAnchorPoint: NSMakePoint(0.5, 0.5)];
但由于某种原因,动画取消了这一点,并重置为 (0, 0)。
那么,有人知道如何为 NSView
的就地旋转设置动画吗?
最佳答案
如果您从界面生成器添加控件并使用其 IBOutlet 旋转它,则不会发生这种情况。您不必使用“setAnchorPoint:”方法; “setFrameCenterRotation:”方法本身就可以工作。然而,当我尝试旋转 NSCell 中作为 subview 的 NSButton 时,同样的事情发生在我身上。解决方案是将 NSView 作为 controlView 中的 subview (请参阅下面的 NSCell 子类)和 NSButton 我需要旋转作为新 NSView 的 subview 。
- (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);
}
关于cocoa - NSView 内容的动画旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278852/