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

时间:2012-02-16 01:06:51

标签: ios uiscrollview calayer

我有一些很好的自定义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分析器中标记为“红色”,因此当它在屏幕上向后滚动时必须再次呈现。这导致短暂的口吃。我不明白为什么容器的图层必须再次光栅化。任何人都可以解释这个或者提供一个解决方法吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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

UIImage from CALayer - iPhone SDK

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

How to capture UIView to UIImage without loss of quality on retina display