创建旋转动画

时间:2013-08-06 15:30:52

标签: ios xamarin

我有一个图像,我想旋转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设置为某个适当高的值,它会一直旋转,直到用户可能失去兴趣,但这似乎不是一个很好的解决方案。

3 个答案:

答案 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)

我认为重复计数是浮点数的原因是允许动画的部分循环。也许你想要一个圆圈通过脉冲来制作动画,但是停在你开始的地方的另一端。