未来的观众:
我已经成功完成了这个旋转动画,并且可以在问题上找到带有描述的代码。NSView 中的 NSImage 旋转不起作用 https://stackoverflow.com/questions/10836131/nsimage-rotation-in-nsview-is-not-working
在继续之前,请投票Duncan C https://stackoverflow.com/users/205185/duncan-c的回答。当我设法从他的回答中实现这种轮换时。
我有一张这样的图
我想在不同的线程上继续旋转这个同步图标。现在我尝试使用 Quartz 作曲家并将动画添加到 QCView,但它的效果非常疯狂,而且速度也很慢。
问题 :
如何以更少的处理费用连续旋转该图像?
Effort
我阅读了 CoreAnimation、Quartz2D 文档,但未能找到使其工作的方法。到目前为止我唯一知道的是,我必须使用
- CALayer
- CAImageRef
- 仿射变换
- NSAnimationContext
现在,我并不期待代码,但理解伪代码会很棒!
让一个物体旋转超过 180 度实际上有点棘手。问题是您为结束旋转指定了一个变换矩阵,系统决定向另一个方向旋转。
我所做的是创建一个小于 180 度的 CABasicAnimation,设置为可加的,并具有重复计数。动画中的每一步都会使对象更加生动。
以下代码取自 iOS 应用程序,但该技术在 Mac OS 中是相同的。
CABasicAnimation* rotate = [CABasicAnimation animationWithKeyPath: @"transform.rotation.z"];
rotate.removedOnCompletion = FALSE;
rotate.fillMode = kCAFillModeForwards;
//Do a series of 5 quarter turns for a total of a 1.25 turns
//(2PI is a full turn, so pi/2 is a quarter turn)
[rotate setToValue: [NSNumber numberWithFloat: -M_PI / 2]];
rotate.repeatCount = 11;
rotate.duration = duration/2;
rotate.beginTime = start;
rotate.cumulative = TRUE;
rotate.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
CAAnimation 对象在图层上操作,因此对于 Mac OS,您需要在界面构建器中设置“想要图层”属性,然后将动画添加到视图的图层中。
为了让你的视图永远旋转,你可以将重复计数设置为一些非常大的数字,例如 1e100。
创建动画后,您可以使用如下代码将其添加到视图的图层中:
[myView.layer addAnimation: rotate forKey: @"rotateAnimation"];
这就是全部内容了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)