UIScrollView性能提示?

时间:2012-10-15 14:53:51

标签: ios performance uiscrollview

我有一个UIScrollView,可以动画很多UIViews(可能太多了)。此外,这些UIViews代表“页面”,有时多个页面堆叠在一起,导致页面“堆积”(通过将子视图添加到给定视图来设置)。

我知道滚动过多的UIViews会导致性能不佳,但我想知道是否有人提出一些提高性能的一般提示?

目前,在drawRect中手动绘图并不是我想要考虑的因为它会弄乱各种“页面堆”动画。我会记住它是最后的手段,但我绝对希望尽可能避免它。

更新: 性能影响的原因已经确定并且有两个方面:我在所有的UIViews上使用抗锯齿和阴影。当我将它们都关闭时,性能问题就解决了!但是,我显然不想只是将它们切换掉:)

我正在创建我的阴影:

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中启用抗锯齿。

有关如何提高阴影/抗锯齿效果的任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

有多少UIViews“很多”?我们在谈论什么样的观点? 如果不需要复杂的绘图,100 UIViews通常不是问题。 但是,渲染PDF的10 UIWebView个实例却是另一回事......

确保您的视图仅在必要时布局和绘制(=仅当它们实际可见时才显示)。例如,您可以通过在视图的layoutSubviews中创建断点来检查这一点。

此外,尽可能使用不透明的UIView元素。这使绘图更有效,因为不必绘制不透明元素下面的视图。

如果碰巧有自定义CALayer实例(例如CAShapeLayer带有阴影等),需要大量处理但很少更改,您可能需要考虑对这些实例进行光栅化:{{1 }} 这通过缓存渲染的合成图像来加速绘制。