UIView动画不起作用

时间:2012-04-27 17:55:44

标签: xcode animation uiview uiimageview

代码非常基础:

UIImageView *testView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
[self.view addSubview:testView];
[testView setImage:[UIImage imageNamed:@"button.png"]];
[UIView animateWithDuration:100
                 animations:^{testView.center =  CGPointMake(140,350);}
                 completion:^(BOOL finished){NSLog(@"animation finished");
                 }
 ];

不知何故,动画无法运作。图像仅显示在结束位置。但是会显示NSLog消息。

有谁知道动画会失败的原因?

非常感谢。

5 个答案:

答案 0 :(得分:0)

[self.view addSubview:testView];

添加子视图后... UI不会立即更新..需要一点时间来刷新..但是在调用动画之前调用动画更新..所以只有在动画完成后才会更新UI ..我建议在动画之前调用[self.view setNeedsDisplay] ..或稍微延迟后调用动画

答案 1 :(得分:0)

我不确定粘贴的代码是否是您的确切部分!!它的动画持续时间为100秒。这是故意的行为吗?

也可以尝试直接更改框架而不是中心。

UIImageView *testView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
[self.view addSubview:testView];
[testView setImage:[UIImage imageNamed:@"button.png"]];
[UIView animateWithDuration:0.5
                 animations:^{testView.frame =  CGRectMake(140,350,80,80);}
                 completion:^(BOOL finished){NSLog(@"animation finished");
                 }
 ];

答案 2 :(得分:0)

您在动画代码中缺少几行。

[UIView animateWithDuration:100 
    delay:0 
    options:UIViewAnimationOptionAllowAnimatedContent 
    animations:^{
        testView.center =  CGPointMake(140,350);
    } completion:^(BOOL finished){NSLog(@"animation finished")}
];

这些动画仅对iOS 7是唯一的,并且是比上面举例说明的更好的解决方案。

你可能早就回答了这个问题,但我希望这个答案可以帮助其他任何人绊倒这个答案。

答案 3 :(得分:0)

这里提供的解决方案实际上都没有用,因为他可能在代码中的错误位置调用他的轮换代码。

在这里打电话,它会起作用

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:YES];

}

答案 4 :(得分:0)

添加QuartzCore框架:

#import <QuartzCore/QuartzCore.h>