我有一个图像,我想旋转360°(顺时针),然后重复,我无法按正确的方式进行此操作。我可以这样做:
UIView.Animate(1, 0, UIViewAnimationOptions.Repeat,
() =>
{
LoadingImage.Transform = MonoTouch.CoreGraphics.CGAffineTransform.MakeRotation(-(float)(Math.PI));
},
() =>
{
});
将图像旋转180°然后快速回到开始并重复。所以,我想如果我做了像1.99 * PI这样的东西,它几乎会一直旋转,看起来还不错。不幸的是,动画系统比这更聪明,而只是反向旋转!
那么让图像连续旋转360°的正确方法是什么?
更新
在帮助或Eric的评论下,我得到了这个:
CABasicAnimation rotationAnimation = new CABasicAnimation();
rotationAnimation.KeyPath = "transform.rotation.z";
rotationAnimation.To = new NSNumber(Math.PI * 2);
rotationAnimation.Duration = 1;
rotationAnimation.Cumulative = true;
rotationAnimation.RepeatCount = 10;
LoadingImage.Layer.AddAnimation(rotationAnimation, "rotationAnimation");
在我的例子中,旋转360°,10次旋转(见RepeatCount
),但是我没有办法告诉它重复,直到我停止它。 CABasicAnimation
有一个RepeatCount
和一个RepeatDuration
,但似乎没有一个属性可以让它继续重复。我可以将RepeatCount
设置为某个适当高的值,它会一直旋转,直到用户可能失去兴趣,但这似乎不是一个很好的解决方案。
答案 0 :(得分:10)
看起来改编自Eric提供的链接的解决方案看起来是最佳选择:
CABasicAnimation rotationAnimation = new CABasicAnimation();
rotationAnimation.KeyPath = "transform.rotation.z";
rotationAnimation.To = new NSNumber(Math.PI * 2);
rotationAnimation.Duration = 1;
rotationAnimation.Cumulative = true;
rotationAnimation.RepeatCount = float.MaxValue;
LoadingImage.Layer.AddAnimation(rotationAnimation, "rotationAnimation");
将RepeatCount
设置为float.MaxValue
至有效让它永远重复(为什么计数是float
而不是int
仍然是个谜)。
答案 1 :(得分:0)
尝试animation.repeatCount = HUGE_VALF;
答案 2 :(得分:0)
我认为重复计数是浮点数的原因是允许动画的部分循环。也许你想要一个圆圈通过脉冲来制作动画,但是停在你开始的地方的另一端。