我使用QuartzCore在iOS上制作了一个时钟动画。目前,每只时钟手都是一个UIView,我将第二只手定位在12 O时钟上&将二手视图的锚点设置为0.5,1.0,这样它就绕着它的底部旋转(而不是中心点)。然后,我将以下动画添加到该层:
(注意,这在CAKeyFrameAnimation上使用了一个类别来启用自定义宽松函数,但它超出了问题的范围。对于所有的意图和目的,动画的行为就像一个普通的CABasicAnimation)
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度。
我尝试过(在动画之前)添加:
float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6);
[secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)];但这会导致第二只手一秒钟随机地在时钟上跳一次。我尝试将fromValue设置为initialMinuteHandTransform值,并/或尝试将toValue更改为initialMinuteHandTransform + sixDegreesOfRadians,但仍然会出现不稳定的运动。
我怎样才能在第三位开始secondHand,并无限期地以每秒6度旋转(时钟面上的每秒一秒钟)的方式将其动画化?
发布于 2013-06-18 21:26:01
您丢失了additive属性。它配置动画以将动画值添加到现有值(相对动画)。
secondHandRotation.additive = YES;这样动画就会从当前的旋转开始。
如果使用CABasicAnimation,则可以使用byValue属性而不是toValue和fromValue。
https://stackoverflow.com/questions/17160063
复制相似问题