在UIScrollView中滚动屏幕外时,CALayer会丢失光栅化

Gol*_*Joe 5 calayer uiscrollview ios

我有一些很好的自定义UIViews使用CALayers来制作一些相当复杂的面具和透明胶片.我花了一段时间才弄清楚如何让它顺利运行,但我发现通过将相关对象包装在容器UIView中,并将容器的layer.shouldRasterize设置为YES,但是将所有包含视图的属性设置为NO ,无论你的混合多么精细,它都能运行.

它基本上是这样的:

UIScrollView中


容器视图(layer.shouldRasterize = YES)

  • child(layer.shouldRasterize = NO)
    • childOfChild(layer.shouldRasterize = NO)
  • child(layer.shouldRasterize = NO)
  • child(layer.shouldRasterize = NO)

容器...

容器......(等等)


基本上,容器在光栅化时最终成为一个大块图像,从而最大限度地减少了必须完成的光栅化量.但是,这给我带来了新的问题.如果我在UIScrollView中有多个容器,只要其中一个容器在屏幕外滚动,它就会在CoreAnimation分析器中标记为"红色",因此当它在屏幕上向后滚动时必须再次呈现.这导致短暂的口吃.我不明白为什么容器的图层必须再次光栅化.任何人都可以解释这个或者提供一个解决方法吗?谢谢.

Gal*_*len 0

您可以保存图层的图像(假设渲染后不会改变),然后在静态 UIImages 之间滚动。

要从 CALayer 创建 UIImage,请尝试 Todd Yandell 的解决方案:

来自 CALayer 的 UIImage - iPhone SDK

或者要从 UIView 创建 UIImage 尝试 Tommy 的解决方案:

如何在视网膜显示上不损失质量的情况下将 UIView 捕获到 UIImage