UIView动画落后于设备

时间:2012-05-15 07:23:07

标签: ios animation uiview uiviewanimation lag

我在我的应用程序中使用动画并感到困惑,因为动画在设备上滞后,在模拟器上一切似乎都可以。首先我尝试使用

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

在提交动画之前,有大约30行带有“if”块的代码,所以我认为这可能会导致问题,但后来我开始使用

[UIView animateWithDuration:0.3
                                  delay:0.0
                                options: UIViewAnimationCurveEaseIn
                             animations:^{
                                 mainView.frame = CGRectMake(0, 0, 320, 420);
                                 buttonsView.transform = CGAffineTransformMakeTranslation(0, 68);
                                 radioBar.transform = CGAffineTransformMakeTranslation(0, -50);
                                 vk_controller.view.frame = CGRectMake(0, 0, 320, 440);
                             } 
                             completion:^(BOOL finished){
                                 button.isHiddenDown = YES;
                             }];

就“if”块而言,但滞后似乎仍然存在。当我按下按钮有延迟〜0.5-1秒(为什么?)然后动画开始。但是当我在桌子上观看时

[UIView animateWithDuration:0.3
                                  delay:0.0
                                options: UIViewAnimationCurveEaseIn
                             animations:^{
                                 mainView.frame = CGRectMake(0, 0, 320, 420);
                                 buttonsView.transform = CGAffineTransformMakeTranslation(0, 68);
                                 radioBar.transform = CGAffineTransformMakeTranslation(0, -50);
                                 goha_news_controller.view.frame = CGRectMake(0, 0, 320, 420);
                                 goha_news_controller.feed_table.frame = CGRectMake(0, 0, 320, 420);
                                 if(goha_news_controller.backgroundView)
                                 {
                                     goha_news_controller.backgroundView.frame = CGRectMake(0, 0, 320, 420);
                                     goha_news_controller.newsDetailView.frame = CGRectMake(0, 0, 320, 420);
                                 }

                             } 
                             completion:^(BOOL finished){
                                 button.isHiddenDown = YES;
                             }];

除了动画前的意外延迟外,还有爆破的粗糙动画 任何人都可以解释为什么会发生这种情况,我该如何解决?

3 个答案:

答案 0 :(得分:5)

另一个可能的原因。您是否在任何屏幕视图或图层中使用阴影? iOS根本无法处理阴影动画。

答案 1 :(得分:1)

您无法使用模拟器来衡量效果。它与设备完全不同(不仅仅是更好或更差)的性能特征(设备也因代代相传而不同)。

如果陈述没有造成重大延误;它们非常便宜。

您的表现问题可能在其他地方。我无法在您向我们展示的代码中看到任何看似明显的性能问题的内容。

答案 2 :(得分:1)

如果在动画时调整控件中的图像大小,这可能会导致滞后,因为图像大小调整是一个非常昂贵的CPU过程。在运行动画和更改图像之前,您应该制作图像的缩略图。

此外,尝试使用Begin动画 - 提交动画而不是使用块动画。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
// Here some more animation settings
// Here your animations 
[UIView commitAnimations];