CALayer Сглаживание не так хорошо, как сглаживание UIView
Я пытаюсь сделать анимацию с использованием CALayer. Все работает хорошо, но проблема в том, что - нарисованный круг недостаточно сглажен. Он имеет слишком грубые границы (или размывается, если используется растеризация). (AntiAliasing включен)
Пробовал также:
edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
безрезультатно.
Вот пример, как он выглядит без растеризации:
![enter image description here]()
И вот пример с растеризацией: (проверенные значения от 1.0 до 4.0 (просто чтобы быть уверенным. Результат - то же самое.))
![enter image description here]()
И вот такой же круг, но нарисованный внутри UIView drawrect:
![enter image description here]()
Вы можете видеть, что кружок, нарисованный с использованием UIView drawrect, выглядит намного лучше.
Причина, по которой я не могу использовать UIView, заключается в том, что мне нужно анимировать заполнение круга. Используя CALayer, это очень просто, но для UIView сделать то же самое, я не знаю, возможно ли это. (Я мог бы попытаться запустить drawrect: каждые 1/60 секунды, но я думаю, что он будет отставать, поскольку он не предназначен именно так).
Итак, есть ли у кого-нибудь какое-либо решение, как сделать рисованные круги/линии на CALayer похожими на рисованные на UIView?
Ответы
Ответ 1
У меня были проблемы с пиксельным рисунком в CALayer
на устройствах сетчатки раньше. (Я предполагаю, что вы видите проблему на сетчатых устройствах). В результате исправлена проблема, которую я испытывал:
layer.contentsScale = [[UIScreen mainScreen] scale];
Вам не нужно иметь дело с растеризацией или сглаживанием. В моем собственном коде я изначально реализовал рисование чего-то в UIView
, которое позже изменил, чтобы оно было нарисовано в CALayer
, и просто установив свойство contentsScale
, сделанное и то, и другое одинаково.