NSButton在可可mac应用程序中顺时针旋转动画

Posted

技术标签:

【中文标题】NSButton在可可mac应用程序中顺时针旋转动画【英文标题】:NSButton rotate animation clockwise in cocoa mac application 【发布时间】:2015-06-24 13:06:33 【问题描述】:

我在目标 c 中有一个可可 mac 应用程序。

当我按下我的 NSButton 时,我想用动画顺时针旋转它几秒钟。

我尝试了下面的代码,但没有工作。

CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    ani.fromValue = [NSNumber numberWithFloat:0];
    ani.toValue = [NSNumber numberWithFloat:-M_PI*2];
    [btnScan.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
    ani.duration = 2.0; // seconds
    ani.repeatCount = HUGE_VAL;
    [btnScan.layer addAnimation:ani forKey:nil];

我搜索了很多,但找不到合适的解决方案。

谁能帮我解决这个问题?

【问题讨论】:

-M_PI*2 基本上是零角度旋转。您是否尝试过 M_PI 只是为了查看您的代码是否正常工作? 是的,如果我也改变它似乎没有任何效果...... 对于其他人在视图像疯了一样的轨道而不是围绕它的轴旋转时遇到问题,也可以这样做 view.layer.position = view.center; (这里的中心是预先计算的, NSView 无法做任何有用的事情) 【参考方案1】:

在制作动画之前添加[btnScan setWantsLayer:YES];。 NSView 与 UIView 不同,默认没有支持层。

来自Apple Docs:

ios 应用程序中,始终启用核心动画并且支持每个视图 一层。在 OS X 中,应用程序必须显式启用 Core Animation 通过执行以下操作提供支持:

链接到 QuartzCore 框架。 (iOS 应用只有在明确使用 Core Animation 接口时才必须链接到这个框架。)

通过执行以下操作之一为您的一个或多个 NSView 对象启用层支持:

在您的 nib 文件中,使用视图效果检查器为您的视图启用图层支持。检查器显示复选框 选定的视图及其子视图。建议您启用 尽可能在窗口的内容视图中提供图层支持。

对于以编程方式创建的视图,调用视图的 setWantsLayer: 方法并传递一个值 YES 来指示 视图应该使用图层。

【讨论】:

非常感谢...不过还要补充一件事。可以用上面的一些代码添加更多的动画。谢谢... @Manthan 请更清楚地解释您想要实现的目标。 请看看这个应用程序itunes.apple.com/in/app/sync.me-social-caller-id-for/…。如果你按同步我,它会动画。 @Manthan 这似乎是一个单独的问题,让我们保持相关性。如果你想实现特定的动画,你可能不得不在一个新线程中寻求想法。

以上是关于NSButton在可可mac应用程序中顺时针旋转动画的主要内容,如果未能解决你的问题,请参考以下文章

《程序员代码面试指南》第八章 数组和矩阵问题 将正方形矩阵顺时针转动90

让交互更加生动!有意思的鼠标跟随 3D 旋转动效

将正方形矩阵顺时针转动90°

如何创建一个打开另一个窗口(Mac)的 NSButton?

Mac之button的使用Show+NSMenu+next+to+NSButton+in+Swift+OSX

opengl如何把glutIdleFunc的帧数调低,感觉转动时速度太快,可以不调角度来让旋转变慢么?