我正在使用UIView动画和presentModalViewController做一些动画。通过模拟器,它看起来很好,但在设备上它相当不稳定。甚至相当基本的视图,例如带有UISearchBar的viewController,带有自定义颜色的UITableView(空)和导航栏上的按钮在通过presentModalViewController进行动画制作时是不稳定的。
我已经尝试在App加载时将视图加载到内存中,然后在按下按钮时显示该视图以查看是否存在差异,但结果相同。作为一个注释,我在代码中创建对象并将它们添加到viewControllers视图中,我没有使用nib。
有一些观点,我所有的动画都是任务栏或alpha属性,这些动画很好。
任何可能有用的技巧?这是在实际发布App时会修复的吗?
答案 0 :(得分:2)
许多UIKit对象渲染速度非常慢(如UITextViews和UISegmentedControllers),因此如果您尝试一次动画很多UIKit对象,它们会显得不稳定。动画的每一帧都需要重新绘制视图。
您可以通过将这些慢速视图转换为UIImageViews来加快这一过程,这些视图可以更加流畅地制作动画。在动画制作之前尝试调用以下方法:
[self flattenView:yourView forDuration:0.5];
-(void)flattenView:(UIView *)view forDuration:(CGFloat)duration
{
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView * imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)];
imgV.image = img;
[view addSubview:imgV];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[imgV removeFromSuperview];
});
}