IOS:使用计时器移动图像

时间:2014-05-20 14:30:27

标签: ios image move fluid

嗨,当我点击一个按钮时,我遇到了问题。

我会使用一个计时器来停止我的代码几毫秒来创建流体的运动。

这是我的代码:

- (IBAction)goRight:(id)sender {
    sprite.image = [UIImage imageNamed:@"sprite_rr.png"];
    [NSThread sleepForTimeInterval:1];
    sprite.center = CGPointMake(sprite.center.x + 5, sprite.center.y);
    sprite.image = [UIImage imageNamed:@"sprite_lr.png"];
}

但是这个代码患者30毫秒然后直接执行而无需等待。

你能帮帮我吗? 感谢

PS:抱歉我的英语不好^^

3 个答案:

答案 0 :(得分:0)

使用[NSThread sleepForTimeInterval:1];的不良做法。这会停止主线程上运行的所有内容。当到达这行代码时,主线程被阻塞了你指定的时间,然后将执行其余的代码。请记住,当您阻止线程时,您的应用程序将冻结,因为所有用户界面更新都是在此步骤中完成的,无法执行。除非你有理由,否则请避免使用它。

在没有提供更多代码的情况下,或者在为UIImageView制作动画时想要停止的确切示例,我认为我们无法继续提供帮助。

答案 1 :(得分:0)

您可能会使用以下内容:

[UIView animateWithDuration: 1
                      delay: 0.03 // delays the animation for however long you set. This is 30 ms.
                    options: UIViewAnimationOptionCurveEaseIn
                 animations: ^{
                     [sprite setFrame:CGRectMake(sprite.frame.origin.x+5, sprite.frame.origin.y, sprite.frame.size.width, sprite.frame.size.height)];
                 }
                 completion: ^(BOOL finished){}];

答案 2 :(得分:0)

尝试:

- (IBAction)goRight:(id)sender {
    sprite.image = [UIImage imageNamed:@"sprite_rr.png"];
    CGRect frame = sprite.frame;
    frame.origin.x += 5;
    [UIView animateWithDuration:1.0 animations:^{
            [sprite setFrame: frame];
            sprite.image = [UIImage imageNamed:@"sprite_lr.png"];
        }];

}

为了动画或移动"在视觉上,您需要使用animateWithDuration: animations:方法。

编辑:尝试设置框架而不是修改中心。