3

我正在为 iPhone 开发一个动画时钟应用程序,我必须旋转视图中的所有 3 个节点,我在以下代码中获得了这些节点:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

clockarm.layer.anchorPoint = CGPointMake(0.0, 0.0);
[CATransaction commit];

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
[CATransaction setValue:[NSNumber numberWithFloat:50.0] forKey:kCATransactionAnimationDuration];

CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:-60.0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
animation.delegate = self;
[clockarm.layer addAnimation:animation forKey:@"rotationAnimation"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];


[CATransaction commit];

它只是旋转一次的问题,即。只有 360 度然后停止。我想无限期地旋转针头。我该怎么做?

4

6 回答 6

4

这与此处提出的问题有关,我在其中指出了我对类似问题的回答。在这种情况下,我将旋转动画拆分为半圆旋转,使它们累积,并将半旋转的次数设置为重复计数。正如我在两者中所建议的那样,将其作为 CAKeyframeAnimation 执行可能会产生更清晰的旋转。

在您的情况下,您可以将重复次数设置为足够高的值,以使动画永远不会结束。作为后备方案,您可以遵循 François P. 和 Squeegy 的建议,并添加回调以在动画完成时重新启动动画。

于 2009-02-14T15:53:24.257 回答
4

我从来没有做过,但这是我会尝试的。您已经将委托设置为self. 实现委托的方法animationDidStop:finished:并简单地调用您将在上面放置代码的方法。确保在主线程上调用它(使用 performOnMainThread)。

于 2009-02-14T11:53:10.887 回答
3

添加 animationDidFinish 委托方法并再次设置动画以进行另一次旋转。CA 不会让您将事情翻转超过 360 度。

于 2009-02-14T11:43:39.347 回答
1

我会稍微不同地看待这个问题。我不确定您为什么要使用 50 秒的时间,但我不会依靠它来保持准确的时间。相反,我会设置一个计时器,它每秒或半秒触发一次,并为时钟设置动画以从当前位置移动到新时间。

PS你的 fromValue 看起来是度数,但它应该是弧度。

于 2010-01-19T05:08:42.227 回答
0

我使用“scalingAnimation.repeatCount=1000000000;” 为目的。不确定这是否适合您。

于 2009-05-06T06:36:48.370 回答
0

对于 n 号 重复尝试使用值-1,我从不这样做,但它可能会帮助你。

于 2010-05-23T07:57:57.663 回答