【发布时间】:2012-10-15 23:55:38
【问题描述】:
我有一个 UIScrollView 动画很多 UIViews(可能太多)。此外,这些 UIView 代表“页面”,有时多个页面相互堆叠,形成“一堆”页面(通过将子视图添加到给定视图来设置)。
我知道滚动过多的 UIView 可能会导致性能下降,但我想知道是否有人对我有一些提高性能的一般提示?
目前,我不想考虑在 drawRect 中手动绘制,因为它会弄乱各种“页面堆”动画。我会在万不得已的时候记住它,但如果可能的话,我绝对想避免它。
更新: 性能下降的原因已经确定,有两个方面:我在所有 UIView 上都使用了抗锯齿和阴影。当我将它们都关闭时,性能问题就解决了!但是,我显然不想只是将它们关闭:)
我正在像这样创建我的阴影:
self.imageView.layer.opaque = YES;
self.imageView.layer.masksToBounds = NO;
self.imageView.layer.shadowOffset = CGSizeMake(-4, 0);
self.imageView.layer.shadowRadius = 2.5;
self.imageView.layer.shadowOpacity = 0.15;
self.imageView.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(
self.bounds.origin.x,
self.bounds.origin.y,
self.bounds.size.width + 8,
self.bounds.size.height + 2)].CGPath;
有什么提高性能的技巧吗?
就抗锯齿而言,它几乎是必需品。问题是那些“偏移页面”略微旋转并且我的页面有 1 像素边框。用 1 像素边框稍微旋转而没有抗锯齿看起来很糟糕。我只是通过将“使用边缘抗锯齿渲染”设置为 YES 来在 .plist 中启用抗锯齿。
如有任何关于如何提高我的阴影/抗锯齿性能的建议,我们将不胜感激。
【问题讨论】:
-
一个提示是尽可能使用 CATiledLayer。这将通过将渲染分成可由多个内核处理的块来加速渲染。
-
您是否考虑过在一个单独的视图中显示每个页面,而不是滚动视图,您可以通过一个简单的动画来浏览?
-
你提到这很有趣,它实际上已经存在!详细说明...我正在谈论的 UIScrollView 显示了多个文档,每个文档都可能包含多个页面。 “堆叠页面”效果是通过添加额外的 UIView 并偏移它们来实现的(最多显示 4 个偏移页面以限制额外的 UIView),但这会造成 UIView 过多,降低滚动性能(我认为)。如果您点击一个文档,会有一个精美的动画,然后您会转到您提到的那个单独的视图,您可以在其中弄乱页面:)(我认为这就是您的意思)
标签: ios performance uiscrollview