我在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度(钟面上的秒数)动画一次?
答案 0 :(得分:1)
您缺少additive
属性。它配置动画以将动画值添加到现有值(相对动画)。
secondHandRotation.additive = YES;
这样动画就会从当前的旋转开始。
如果您使用CABasicAnimation
,则可以使用byValue
属性而不是toValue
和fromValue
。