2010-02-25 86 views
1

我有UIView的动画代码块看起来像这样:UIView隐式动画的延迟来源?

[UIView beginAnimations:@"pushView" context:nil]; 
[UIView setAnimationDelay:0]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationWillStartSelector:@selector(animationWillStart)]; 

view.frame = CGRectMake(0, 0, 320, 416); 
[UIView commitAnimations]; 

的代码基本上是模仿ModalView演示动画,并绑在我的按钮界面上。当按下按钮时,在animationWillStart:实际被调用之前,我得到一个很长的(0.5秒)延迟(在iPod Touch上的速度是iPhone 3GS的两倍)。除此之外,我的应用程序还有很多功能,但是我已经对代码的各个时间点进行了计时,并且延迟肯定发生在这个模块上。换句话说,紧接在此代码块之前的时间戳和animationWillStart:被调用时的时间戳显示0.5秒的差异。

我对Core Animation没有太多经验,我只是想弄清楚延迟的原因是什么......当动画开始时,内存使用稳定,CoreAnimation FPS在乐器中似乎很好。获得动画效果的视图确实有20个以上的子视图,但是如果这是问题,它会在动画开始之后导致昙花一现,而不是之前?有任何想法吗?

回答

1
  1. 尝试使用一个子视图或根本没有子视图,以确保延迟不是由太多的孩子造成的。
  2. 在仪器中剖析代码以查看代码滞后的位置。你可能会想到一些内部的核心动画函数调用,它会提示你发生了什么。
  3. 尝试没有“正在发生的事情”的代码,以确保您没有踩过Core Animation的脚趾与其他代码。

或简而言之:实验和测量,因为在优化时猜测很少工作。

1

在粘贴块中,指定选择器animationWillStart(无冒号),但稍后在您的问题中,请参阅animationWillStart:(带冒号)。这些选择器是不相同的,所以有可能您的预期选择器是从未因此动画而被调用,并且由于某些其他动画被称为0.5秒以后被调用?