我在 iOS 上使用 QuartzCore 制作了一个时钟动画。每个时钟指针都是UIView
当前,我将秒针定位在 12 点钟并将秒针视图的锚点设置为 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 秒,我想在显示时钟并开始动画之前将秒针旋转 180 度。
我已经通过添加(在动画之前)尝试了这个:
float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6);
[secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)];
但这会导致秒针每秒绕钟面随机跳动一次。我试图将 设置为该fromValue
值initialMinuteHandTransform
,和/或尝试将 更改toValue
为initialMinuteHandTransform
+sixDegreesOfRadians
但我仍然得到不稳定的运动。
如何从secondHand
任意位置开始,并无限期地每秒一次旋转 6 度(钟面上的一秒)动画?