objective-c – 如何在NSImageView内部实现NSImage的连续旋转?

前端之家收集整理的这篇文章主要介绍了objective-c – 如何在NSImageView内部实现NSImage的连续旋转?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
未来观点:

我已经设法完成这个旋转动画和代码与描述可以在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"];

这就是它所有的一切.

猜你在找的C&C++相关文章