由于UIImageViews,应用程序运行缓慢

时间:2012-03-18 05:24:32

标签: iphone objective-c ios ipad uiimageview

我有两个大的UIImageViews在我的iPad应用程序中显示图像(每个都几乎与屏幕大小相同,它们具有特殊效果,如旋转,阴影等,看起来像新闻堆栈) 。显示这些图像后,应用程序将非常缓慢运行。 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;

3 个答案:

答案 0 :(得分:3)

我们只能在没有看到实际代码的情况下猜测。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

最佳解决方案是将阴影渲染为图像。但是,如果您手动设置shadowRadius,我预计使用CALayer shadowPath的效果会大大提高。

否则,必须由系统每帧计算。自己设置会让动画表现变得荒谬。