3

我有一张我想旋转 360°(顺时针)然后重复的图像,但我无法找到正确的方法来执行此操作。我可以做这个:

            UIView.Animate(1, 0, UIViewAnimationOptions.Repeat,
            () =>
            {
                LoadingImage.Transform = MonoTouch.CoreGraphics.CGAffineTransform.MakeRotation(-(float)(Math.PI));
            },
            () =>
            {
            });

它将我的图像旋转 180°,然后重新开始并重复。所以,我想如果我做 1.99 * PI 之类的事情,它会几乎一直旋转并且可能看起来还不错。不幸的是,动画系统比这更聪明,只会向相反的方向旋转!

那么让图像连续旋转 360° 的正确方法是什么?

更新

在帮助或埃里克的评论下,我得到了这个:

        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有 aRepeatCount和 a RepeatDuration,但似乎没有属性告诉它继续重复。我可以设置RepeatCount一个适当高的值,它会一直旋转直到用户可能失去兴趣,但这似乎不是一个很好的解决方案。

4

3 回答 3

11

Looks like the solution adapted from the link Eric provided looks like the best choice:

    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");

Set RepeatCount to float.MaxValue to effectively keep it repeating forever (why a count is a float rather than an int remains a mystery).

于 2013-08-07T13:42:34.803 回答
0

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

于 2014-04-07T03:33:23.240 回答
0

尝试 animation.repeatCount = HUGE_VALF;

于 2013-08-06T15:55:53.630 回答