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, сделанное и то, и другое одинаково.