用核心动画旋转UIImageView

时间:2011-04-12 14:09:11

标签: objective-c xcode ipad ios4

我正在尝试制作一些相对简单的东西,当用户触摸按钮时使轮子旋转90度,大部分我迄今为止所做的工作是第一次,但此后图像不会移动。我希望它保持新的位置,然后从新的位置旋转90度,我有 [UIView setAnimationBeginsFromCurrentState:YES];

但这似乎不起作用

我添加了NSTimer以“重置”原始图像方向,以便车轮弹回原始位置,然后在用户触摸时再次旋转。 ......但这并不是我想要的。

有没有办法让图像保持旋转90度,因此用户进行四次触摸会将图像恢复到原始位置。谢谢你的帮助!!

这是示例代码


-(IBAction) rotatewheel:(id)sender {

      [UIView setAnimationDuration:1];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationRepeatCount:1];
    wheel.transform = CGAffineTransformMakeRotation(M_PI/4);
    [UIView commitAnimations];  

    returnwheelTimer = [NSTimer scheduledTimerWithTimeInterval:1.1 target:self selector:@selector (returnwheel) userInfo:nil repeats:NO];

}

-(void) returnwheel {

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDuration:.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationRepeatCount:1];
    wheel.transform = CGAffineTransformMakeRotation(M_PI);
    [UIView commitAnimations];  

}

2 个答案:

答案 0 :(得分:8)

而不是:

wheel.transform = CGAffineTransformMakeRotation(M_PI/4);

使用

wheel.transform = CGAffineTransformRotate(wheel.transform,M_PI/4);

这样它会将新变换应用于当前变换,而不是替换它。

答案 1 :(得分:0)

有三种简单的方法可以实现这一点 1)使用Unity3D等游戏引擎,而不是XCode。制作旋转轮的动画并将其编写为按钮按下时的脚本。这样做相对简单,并且有许多优秀的现有教程。我建议使用Avaam Studios的iGUI(我不隶属于他们或以任何方式有偏见)。

2)创建一个带有一系列照片的NSObject,并在按钮按下时启动轮子旋转的定格动画。可以找到关于此主题的主题here

3)如果您希望车轮从其最后位置旋转90度,以便在四次点击后可以旋转整圈(36),则需要采用不同的方法。我建议每次按下按钮时都要更换一个不同的按钮。这样你就不需要对推送次数进行数学计算了。您将有四个不同的IBOutlets(每个相同的按钮一个),每个按钮将a)将图像旋转90度,然后b)消失并用另一个按钮替换。我没有看到任何实际的实现,但它是可行的。 Here是关于一个按钮上多个方法主题的线索(可能是我想法的更好替代方案)。