0

我在 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)];

但这会导致秒针每秒绕钟面随机跳动一次。我试图将 设置为该fromValueinitialMinuteHandTransform,和/或尝试将 更改toValueinitialMinuteHandTransform+sixDegreesOfRadians但我仍然得到不稳定的运动。

如何从secondHand任意位置开始,并无限期地每秒一次旋转 6 度(钟面上的一秒)动画?

4

1 回答 1

1

你错过了additive财产。它配置动画以将动画值添加到现有值(相对动画)。

secondHandRotation.additive = YES;

这样动画将从当前旋转开始。

如果您使用 aCABasicAnimation您可以使用该byValue属性而不是toValueand fromValue

于 2013-06-18T21:26:01.713 回答