我曾经看到一些减少卡顿问题的方法,是通过设置视图的layer属性来实现的
view.layer.shouldRasterize = YES;
当使用UICollectionView并准备单元格并设置属性时,我发现性能有很大的差异。
不确定这意味着什么。
如果能解释一下就太好了。谢谢!
我曾经看到一些减少卡顿问题的方法,是通过设置视图的layer属性来实现的
view.layer.shouldRasterize = YES;
当使用UICollectionView并准备单元格并设置属性时,我发现性能有很大的差异。
不确定这意味着什么。
如果能解释一下就太好了。谢谢!
shouldRasterize
会对性能产生不利影响(因为它将为每个动画帧重新光栅化图层)。shouldRasterize
设置为YES
,执行动画处理,然后关闭shouldRasterize
。iOS shouldRasterize
Rasterization = off-screen Rendered + off-screen buffer(cache)
shouldRasterize = true
优点 - 对于复杂的图层(包括子视图、子图层和其他效果),会发生移动(滚动等)。使用缓存而不是每次重新绘制它很简单。
缺点 - 不具有动态性。如果视图更改边界(宽度、高度、阴影、cornerRadius、颜色、内部内容等...),它会产生额外工作-缓存被重建。频繁地重新生成缓存会对性能产生影响。
UIKit 预渲染视图离屏(子图层、子视图将被考虑在内,创建一个单一位图,之后所有其他效果(如不透明度、遮罩..)将被应用并保存(缓存)到RAM中(直到需要更新),当图层的位置改变时-UIKit 直接从RAM读取它(缓存的图层)(而不是从头开始渲染(这不是一项简单的任务,例如计算颜色混合层..))
它将焦点从GPU转移到RAM,这需要一些额外的工作,但在使用过程中能提高执行速度。
view1.layer.shouldRasterize = true
view1.layer.rasterizationScale = UIScreen.main.scale
UITableView
中使用shouldRasterize = true
,当您有一个带有许多阴影等复杂视图+滚动时,它会导致性能下降,这就是为什么shouldRasterize = true
有其存在的地方。在这里,您将看到单元格被缓存,但新单元格将被重新生成。