为什么UIBezierPath比CAShapeLayer更快

时间:2013-06-10 03:57:26

标签: ios calayer lag uibezierpath cashapelayer

我一直在尝试绘制地图。我绘制了美国地图作为一系列UIBezierPath(每个州的一条路径 - 用PaintCode转换SVG文件)。与此同时,我正在与CAShapeLayer合作,并对他们的速度感到惊讶。我决定将UIBezierPath转换为CAShapeLayer。它最终变得极其缓慢。即使我旋转设备,视图也会断断续续。有谁知道为什么会这么慢?似乎每当我用太多的CAShapeLayer填充视图时,它会大大减慢应用程序的速度。

这不是特定于代码的问题,我只是想知道您在应用程序中可以使用的CALayer数量是否有限制。

2 个答案:

答案 0 :(得分:1)

CAShapeLayer主要用于创建您将设置动画的形状。因此,当您使用它时,每个修改都是动画的。我不知道UIBezierPathCAShapeLayer在光栅化过程中也使用了抗锯齿,这需要进行离线渲染,这是一项昂贵的任务。

答案 1 :(得分:0)

屏幕外渲染包括 shouldRasterize(光栅化) 面具(遮罩) 阴影(阴影) edge antialiasing(抗锯齿) group opacity(不透明) 因此,如果你关闭不透明和阴影并打开光栅,它会更快。你会感觉到不同。但仍然会减慢申请速度。