【问题标题】:App running slowly because of UIImageViews由于 UIImageViews,应用程序运行缓慢
【发布时间】:2012-04-03 02:46:46
【问题描述】:

在我的 iPad 应用程序中,我有三个显示图像的大型 UIImageView(每个都几乎是屏幕的大小,并且它们具有旋转、阴影等特殊效果,看起来像一个新闻堆栈) .当显示这些图像时,应用程序会非常缓慢地运行。 UIAlertViews 从字面上看,当它们呈现时它们只有两帧,并且动画甚至没有滞后......它们更糟!但是当我不展示 UIImageViews 时,一切都会快速而优雅地运行。显然我做错了,因为 iOS 肯定可以处理三个图像。关于如何使应用程序运行得更快的任何建议?谢谢。

PS 我什至不想知道当我将新 iPad 的图像分辨率加倍时会发生什么哈哈

编辑:这是我用来设置阴影的代码。这利用了 QuartzCore 框架。

page2.layer.shadowColor = [UIColor blackColor].CGColor;
page2.layer.shadowOpacity = 1.0;
page2.layer.shadowRadius = 10.0;
page2.layer.shadowOffset = CGSizeMake(0, 4);

编辑 2(答案):似乎由于我设置阴影的方式而出现了延迟。 如果将 shadowPath 属性设置为 UIImageViews 边界的 UIBezierPath,渲染会更快更流畅,应用程序也会显着加速。这是我的最终代码:

page2.layer.shadowColor = [UIColor blackColor].CGColor;
page2.layer.shadowOpacity = 1.0;
page2.layer.shadowRadius = 10.0;
page2.layer.shadowOffset = CGSizeMake(0, 4);
page2.layer.masksToBounds = NO;
UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:page2.bounds];
page2.layer.shadowPath = path2.CGPath;

【问题讨论】:

  • 你的图片来自url ??
  • 不,它们保存在文档目录中。
  • 你先保存到文档目录????
  • 是的,在显示视图之前,所有内容都已保存在文档目录中并可用。视图呈现后,UIImageViews 被加载,麻烦就开始了。
  • 当您将图像存储在文档目录中时,将其压缩并存储在文档目录中..您在表格视图中显示图像???

标签: iphone objective-c ios ipad uiimageview


【解决方案1】:

看不到实际代码,我们只能猜测。

  • 阴影可能非常昂贵。如果您关闭它们或减少shadowRadius,它会变得更快吗?
  • 设置shadowPath 属性可以带来巨大的改进,如果您可以使用它来获得您想要的效果。
  • 否则:将阴影烘焙到图像中,或使用其他技术来伪造图像边缘周围的阴影。

【讨论】:

  • 另外,是的,关闭阴影后一切都会加快。
  • 尝试设置shadowPath。这可能足以提供帮助。不过,10 pt shadowRadius 仍然很大。
【解决方案2】:

如果您使用CALayer 阴影,这可能是任何类型动画的主要性能问题。它们触发了软件渲染器,这对动画造成了非常严重的伤害。如果您有矩形阴影,最好在 Photoshop 中绘制阴影并将其用作单独视图/图层中的可拉伸图像。如果您的视图具有不规则的形状,您可以使用 Core Graphics 绘制它们,并且在动画发生时仍然会快得多

【讨论】:

  • 设置 shadowProperty 也有很大帮助。
【解决方案3】:

最好的解决方案是将阴影渲染为图像。但是,如果您手动设置 shadowPath,我希望使用 CALayer shadowRadius 的性能会大大提高。

否则,它必须由系统计算,每一帧。自己设置会大大提高动画性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多