Почему UIBezierPath быстрее, чем CAShapeLayer
Я экспериментировал с рисованием карт. Я нарисовал карту Соединенных Штатов в виде серии UIBezierPath (по одному пути для каждого штата - конвертировал файл SVG с помощью PaintCode). В то же время я работал с CAShapeLayer и был поражен их скоростью. Я решил преобразовать UIBezierPath в CAShapeLayer. Это оказалось очень медленным. Вид будет заикаться, даже когда я поверну устройство. Кто-нибудь знает, почему это так медленно? Кажется, что когда я заполняю представление слишком большим количеством CAShapeLayer, это сильно замедляет работу приложения.
Это не специфичная для кода проблема, мне просто интересно, есть ли ограничения на количество CALayer, которое вы можете использовать в приложении.
2 ответа
CAShapeLayer
в основном используется для создания фигур, которые вы бы анимировали. Поэтому, когда вы используете его, каждая модификация анимируется. Я не знаю UIBezierPath
но CAShapeLayer
также используйте сглаживание во время растеризации, и это потребовало бы рендеринга за кадром, что является дорогостоящей задачей.
Внеэкранный рендеринг включает в себя mustRasterize (光栅 光栅) маски (遮罩) теней (阴影) сглаживания краев (抗锯齿) непрозрачности группы (不透明)), так что если вы отключите непрозрачность и тени и включите растеризацию, это будет быстрее. Вы почувствуете разницу. но все равно медленное приложение.