我正在研究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度然后停止。我想无限期地指向针。我该怎么做?
答案 0 :(得分:4)
我从来没有这样做过,但这是我会尝试的。您已将委托设置为self
。实现委托的方法animationDidStop:finished:
,然后只需调用上面代码的方法。确保在主线程上调用它(使用performOnMainThread)。
答案 1 :(得分:4)
这与问题here有关,我在其中指出了my response类似的问题。在这种情况下,我将旋转动画分成半圆旋转,使它们累积,并将半旋转的数量设置为重复计数。正如我在两者中所建议的那样,将其作为CAKeyframeAnimation执行可能会产生更清晰的旋转。
在您的情况下,您可以将重复次数设置为足够高的值,动画永远不会到达终点。作为后备,您可以遵循FrançoisP。和Squeegy的建议,并添加回调以重新启动动画,如果它完成。
答案 2 :(得分:3)
添加animationDidFinish委托方法并再次设置动画以进行另一次旋转。 CA不会让你把东西转过360度。
答案 3 :(得分:1)
我会稍微看一下这个问题。我不确定你为什么要使用50秒的时间,但我不会依赖它来保持准确的时间。我会改为设置一个每秒或半秒触发一次的计时器,并设置时钟动画以从当前位置移动到新的时间。
P.S。你的fromValue看起来是度数,但它应该是弧度。
答案 4 :(得分:0)
我使用“scalingAnimation.repeatCount = 1000000000;”为目的。不确定这是否适合你。
答案 5 :(得分:0)
表示没有。重复尝试使用值-1,我从不这样做,但它可能会帮助你。