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

时间:2013-06-18 03:26:14

标签: ios objective-c core-animation

我在iOS上使用QuartzCore组合了一个时钟动画。每个时钟指针都是UIView目前,我将秒针置于12 O时钟和时钟位置。将秒针视图的锚点设置为0.5,1.0,使其围绕其底部(而不是中心点)旋转。然后我将以下动画添加到图层:

(请注意,这会使用CAKeyFrameAnimation上的类别来启用自定义缓动函数,但它超出了问题的范围。对于所有意图和目的,动画的行为就像常规 { {1}}

CABasicAnimation

这与预期完全一致,但是,秒针始终从钟面上的12 O时钟开始。我想从一个任意的位置开始。例如,如果“秒”的当前值是30秒,我想在显示时钟并开始设置动画之前将第二个手柄旋转180度。

我通过添加(在动画之前)尝试了这个:

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"];

但这会导致秒针每秒钟在钟面上随机跳跃一次。我试图将float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6); [secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)]; 设置为fromValue值,和/或尝试将initialMinuteHandTransform更改为toValue + initialMinuteHandTransform,但我仍然会变得不稳定

如何在仲裁位置开始sixDegreesOfRadians,并以无限期每秒一次旋转6度(钟面上的秒数)动画一次?

1 个答案:

答案 0 :(得分:1)

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

secondHandRotation.additive = YES;

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

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