cocoa - NSView 内容的动画旋转

标签 cocoa animation core-animation rotation nsview

我正在尝试就地旋转 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/

相关文章:

objective-c - Objective C 中的二次方程计算

cocoa - 在 MPOAuthConnection 中设置请求参数时出现问题

python - 从 XCode 运行 python 脚本时不写入文件

ios - UIView beginAnimations 在自定义属性上太快

objective-c - 如何将 CALayer 的内容设置为 CGImageRef?

objective-c - 从多个线程使用 runModalForWindow 有多危险?

javascript - 普通的 js 计时器和这个 jquery 计时器插件有什么区别?

android - 向下拖动时,Android List View 动画

javascript - 在 requestAnimationFrame 中,什么会导致和不会导致重绘/回流?

cocoa - 即使 CGPathRef 已释放,CAShapeLayer 如何继续在路径 (CGPathRef) 上绘制?