使用透明CALayers平滑滚动UIScrollView

时间:2013-07-27 14:42:44

标签: ios uiscrollview calayer catextlayer

我正在开发一款iPhone应用程序,该应用程序将显示大型可滚动和可缩放的表面,其上包含图片和文本标签网格。我需要能够单独更改图片的位置并控制标签的不透明度。我尝试使用UIScrollView和核心动画来实现这些目标。

UIScrollView的子视图包含两个主要子图层:一个用于显示图片,另一个用于标签。图片为CALayers,其内容属性设置为CGImage,并将它们作为子图层添加到图片图层。标签为CATextLayers,它们是第二层的子图层。标签图层的透明度会根据滚动视图的缩放比例而变化。

这就是问题:当标签完全不透明或完全透明时,一切正常,但是当它们是半透明的时,滚动开始变得粗糙,FPS下降到大约35。显然混合这些图层减慢了一切,但我找不到解决方法。 我将非常感谢有关如何在这种情况下提高性能的任何想法。也许有更好的方法来绘制文字标签而不是使用 CATextLayer

2 个答案:

答案 0 :(得分:0)

您是否可以将UIScrollView的两个“主要图层”合并为一个?此外,您是否可以直接将图层添加到UIScrollView的图层而不是添加其他图层?

我发现通过减少为了包含其他图层而存在的图层数量,我获得了巨大的性能提升。

答案 1 :(得分:-1)

一种解决方案是为图像层和文本图层的大多数背景图层添加阴影。

您可以调整大量的阴影属性,例如shadowPathshadowColorshadowOffsetshadowRadius - 设置每个属性,不要错过任何属性。同时设置yourlayer.masksToBounds = NO

不要忘记添加yourlayer.shouldRasterize = YES,因为这会对性能产生更好的影响。