加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:16:49 所属栏目:百科 来源:网络整理
导读:未来观点: 我已经设法完成这个旋转动画和代码与描述可以在tho问题找到. NSImage rotation in NSView is not working 在你继续之前,请提出Duncan C的答案.当我从他的答案中实现这个轮换时. 我有这样的形象, 我想继续旋转这个同步图标,在不同的线程上.现在我
未来观点:

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

这就是它所有的一切.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读