2

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

[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;
                             }];

除了动画前的意外延迟外,还有连发的刺耳动画。
谁能解释它为什么会发生,我该如何解决?

4

3 回答 3

5

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

于 2012-05-15T18:30:25.660 回答
1

您不能使用模拟器来衡量性能。它具有与设备完全不同(不仅仅是更好或更差)的性能特征(并且设备也因代而异)。

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

您的性能问题可能在其他地方。在您向我们展示的代码中,我看不到任何看起来像明显性能问题的东西。

于 2012-05-15T08:30:29.053 回答
1

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

此外,尝试使用开始动画 - 提交动画而不是使用块制作动画。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
// Here some more animation settings
// Here your animations 
[UIView commitAnimations];
于 2012-05-15T10:38:05.683 回答