UINavigationController推送转换期间的低帧速率
我有一个
UINavigationController
,并从根视图控制器推送到下一个视图控制器。第二个视图控制器相当“重”,因为它有很多初始化和子视图。
我的问题是:过渡动画执行得非常糟糕。基本上,动画的帧速率非常低(从“推”动画中我总共得到3-4帧)。
我尝试了各种不同的技术,包括两种不同的方法来手动设置转换动画。在所有情况下,动画的前0.4-0.7秒都会受到这种不良帧率的影响。例如,如果我将转换设置为5秒,那么前半秒左右的表现不佳,但动画的其余部分非常流畅。
这让我相信在转换开始时会发生“某事” - 这会导致设备以非常低的帧速率进行动画制作。
在我的代码中注入了很多NSLog
语句后,我发现有两件事情发生了。首先,显然第二个视图在推送过程中是延迟加载的。我通过在执行推送之前访问view属性上的getter来修复此问题。我可以确认这会导致在推动动画开始之前发生所有初始化。
其次,我的应用程序大部分时间在过渡期间收到低内存警告。然而,即使在我没有得到内存警告的情况下,动画仍然表现得很差 - 让我相信这些都不是原因。
我的问题:有没有其他人在UINavigationController
推送过渡动画中遇到低帧速率,但仅限于动画的前0.4-0.7秒?幕后是否还有其他事情导致它,并且可以做任何事情?
作为参考,这是我当前加载并推送到下一个视图的代码。我有意访问视图getter,以强制视图在转换之前加载和初始化(主要是为了排除问题)。使用performSelectorOnMainThread:::
在主线程上执行此代码以响应Web服务回调。
PlayingFieldViewController *v = [[PlayingFieldViewController alloc] initWithNibName:@"PlayingFieldView" bundle:[NSBundle mainBundle]];
UIView *lazy = v.view;
[appDelegate.navigationController pushViewController:v animated:YES];
[v release];
我也尝试了一些其他动画技术,都有相同的结果:
CATransition *transition = [CATransition animation];
transition.duration = 1.0;
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[appDelegate.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[appDelegate.navigationController pushViewController:v animated:NO];
和:
[UIView
transitionWithView:appDelegate.navigationController.view
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
[appDelegate.navigationController pushViewController:v animated:NO];
}
completion:NULL];
没有找到相关结果
已邀请:
2 个回复
癸痊醒
。删除这些视图或隐藏它们可以解决问题。 让我失望的是,只有动画的第一部分受到帧速率问题的影响,而动画的其余部分则完全平滑(在动画较长的情况下)。这告诉我,即使存在所有子视图,该设备也能够平滑地动画过渡。 我仍然不是iOS合成的专家,但我猜测各个层正在布局和缓存,导致速度减慢。解决方法是在隐藏大部分子视图的情况下推送到视图,然后在视图可见时使用另一个动画显示它们。
悸翠疮武昏
或使用