首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在图层上设置初始AffineTransform,然后进行动画累积变换?

在图层上设置初始AffineTransform,然后进行动画累积变换?
EN

Stack Overflow用户
提问于 2013-06-18 03:26:13
回答 1查看 794关注 0票数 0

我使用QuartzCore在iOS上制作了一个时钟动画。目前,每只时钟手都是一个UIView,我将第二只手定位在12 O时钟上&将二手视图的锚点设置为0.5,1.0,这样它就绕着它的底部旋转(而不是中心点)。然后,我将以下动画添加到该层:

(注意,这在CAKeyFrameAnimation上使用了一个类别来启用自定义宽松函数,但它超出了问题的范围。对于所有的意图和目的,动画的行为就像一个普通的CABasicAnimation)

代码语言:javascript
复制
CAKeyframeAnimation *secondHandRotation;
secondHandRotation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"
                                                      function:BounceEaseOut
                                                     fromValue:0
                                                       toValue:(sixDegreesOfRadians)];

secondHandRotation.duration = 1;
secondHandRotation.cumulative = YES;
secondHandRotation.repeatCount = 10000;

[secondHand.layer addAnimation:secondHandRotation forKey:@"rotationAnimation"];

这完全符合预期的行为,然而,第二只手总是从时钟表面的12点开始。我想从一个武断的立场开始。例如,如果“秒”的当前值是30秒,在显示时钟并开始动画之前,我希望将secondHand旋转180度。

我尝试过(在动画之前)添加:

代码语言:javascript
复制
float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6);
[secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)];

但这会导致第二只手一秒钟随机地在时钟上跳一次。我尝试将fromValue设置为initialMinuteHandTransform值,并/或尝试将toValue更改为initialMinuteHandTransform + sixDegreesOfRadians,但仍然会出现不稳定的运动。

我怎样才能在第三位开始secondHand,并无限期地以每秒6度旋转(时钟面上的每秒一秒钟)的方式将其动画化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 21:26:01

您丢失了additive属性。它配置动画以将动画值添加到现有值(相对动画)。

代码语言:javascript
复制
secondHandRotation.additive = YES;

这样动画就会从当前的旋转开始。

如果使用CABasicAnimation,则可以使用byValue属性而不是toValuefromValue

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17160063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档