UIView动画性能问题

时间:2010-10-13 00:34:39

标签: iphone animation uiview

我正在使用UIView动画和presentModalViewController做一些动画。通过模拟器,它看起来很好,但在设备上它相当不稳定。甚至相当基本的视图,例如带有UISearchBar的viewController,带有自定义颜色的UITableView(空)和导航栏上的按钮在通过presentModalViewController进行动画制作时是不稳定的。

我已经尝试在App加载时将视图加载到内存中,然后在按下按钮时显示该视图以查看是否存在差异,但结果相同。作为一个注释,我在代码中创建对象并将它们添加到viewControllers视图中,我没有使用nib。

有一些观点,我所有的动画都是任务栏或alpha属性,这些动画很好。

任何可能有用的技巧?这是在实际发布App时会修复的吗?

1 个答案:

答案 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];
    });
}