未来观点:
我已经设法完成这个旋转动画和代码与描述可以在tho问题找到. NSImage rotation in NSView is not working
在你继续之前,请提出Duncan C的答案.当我从他的答案中实现这个轮换时.
我有这样的形象,
我想继续旋转这个同步图标,在不同的线程上.现在我尝试使用Quartz作曲家,并将动画添加到QCView,但它具有非常疯狂的效果,也非常慢.
题 :
如何以非常少的处理费用连续旋转图像?
功夫
我读了CoreAnimation,Quartz2D文档,但是我没有找到让它工作的方式.到目前为止,我唯一知道的是,我必须使用
> CALayer
> CAImageRef
> AffineTransform
> 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"];
这就是它所有的一切.