0

我只是想使用这个顺时针旋转 UIImageView 360 度:

#define DEGREES_TO_RADIANS(angle) (angle / 180.0 * M_PI)

还有这个

imageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(360));

然而,即使它被调用,imageView 也不会旋转。我做错了什么吗?我不想使用 CAAnimations,所以请不要推荐我这样做。

谢谢!

4

3 回答 3

2

问题在于 Core Animation 将通过找到从当前状态到新状态的最直接路径来应用动画。旋转 0 度与旋转 360 度相同,因此最直接的最终变换方法是完全不做任何事情。

两个 180 度的步骤会有问题,因为从 0 度到 180 度有两条同样直接的路线,Core Animation 可以选择其中任何一个。所以你可能需要把你的动画分成三个步骤。用 a 做第一个UIViewAnimationOptionCurveEaseIn,用 做第二个,用UIViewAnimationOptionCurveLinear做最后一个UIViewAnimationOptionCurveEaseOut

于 2012-12-04T06:29:00.947 回答
0

也许是因为转换不会在一段时间内发生。在我看来,只要随着时间的推移无法感知,您可能需要在一小段时间内执行转换或转换序列。

于 2012-12-04T06:28:36.553 回答
0

这是受汤米回答启发的代码。

我用了

NSInteger step;

跟踪图像视图的当前旋转度数。

- (void)startAnimation
{
    [UIView animateWithDuration:0.5f 
                          delay:0.0f 
                        options:UIViewAnimationOptionCurveLinear 
                     animations:^{
        imageView.transform = CGAffineTransformMakeRotation(120 * step / 180.0f * M_PI);
    }
                     completion:^(BOOL finished) {
        step++;
        // rotation completed, reset for the next round
        if (step == 4){
            step = 1;
        }

        // perform the next rotation animation
        [self startAnimation];
    }];
}
于 2013-09-12T08:20:16.273 回答