【问题标题】:UIView animation performance problemUIView动画性能问题
【发布时间】:2010-10-13 00:34:38
【问题描述】:

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

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

有几个视图,我正在制作的动画只是任务栏或 alpha 属性,这些动画效果很好。

有什么技巧可以帮上忙吗?这是在实际发布应用程序时会解决的问题吗?

【问题讨论】:

  • 你没有在这些中实现 drawRect 是吗?
  • 不是简单的。我有其中一两个,但我使用 drawRect 的地方动画效果很好。

标签: iphone animation uiview


【解决方案1】:

很多 UIKit 对象的渲染速度都很慢(例如 UITextViews 和 UISegmentedControllers),因此如果您尝试同时为其中的很多对象设置动画,它们可能看起来很不稳定。动画的每一帧都需要重绘视图。

您可以通过将这些缓慢的视图转换成 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];
    });
}

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2018-12-26
    • 2013-09-25
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多