我有一些很好的自定义UIViews,它们使用CALayers来制作一些相当复杂的面具和透明胶片。我花了一段时间才弄清楚如何让它顺利运行,但我发现通过将相关对象包装在容器UIView中,并将容器的layer.shouldRasterize设置为YES,但是将所有包含视图的属性设置为NO无论你的混合多么精细,它都会运行黄油。
基本上是这样的:
的UIScrollView
容器视图(layer.shouldRasterize = YES)
容器...
容器......(依此类推)
基本上,容器在光栅化时最终成为一个大块图像,从而最大限度地减少了必须完成的光栅化量。但是,这给我带来了新的问题。如果我在UIScrollView中有多个容器,只要其中一个容器在屏幕外滚动,它就会在CoreAnimation分析器中标记为“红色”,因此当它在屏幕上向后滚动时必须再次呈现。这导致短暂的口吃。我不明白为什么容器的图层必须再次光栅化。任何人都可以解释这个或者提供一个解决方法吗?感谢。
答案 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