ios objective-c uiview calayer

ios - El antialiasing de CALayer no es tan bueno como el antialiasing de UIView



objective-c (1)

He estado tratando de animar el dibujo circular usando CALayer. Todo funciona bien, pero el problema es que el círculo dibujado no tiene suficiente antialias. Tiene bordes demasiado ásperos (o borrosos si se usa rasterizar). (AntiAliasing está habilitado)

Trató también:

edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;

en vano.

Aquí hay un ejemplo de cómo se ve sin rasterización:

Y aquí hay un ejemplo con rasterización: (valores probados desde 1.0 hasta 4.0 (solo para estar seguro. Resultado - el mismo.))

Y aquí está el mismo círculo, pero dibujado dentro de UIView drawrect:

Puedes ver que el círculo dibujado usando UIView drawrect se ve mucho mejor.

La razón por la que no puedo usar UIView es porque necesito animar el llenado del círculo. Usar CALayer es realmente fácil, pero para hacer lo mismo en UIView, realmente no sé si es posible. (Podría intentar lanzar drawrect: cada 1/60 segundos, pero creo que se volverá más lento, ya que no está previsto).

Entonces, ¿alguien tiene alguna solución sobre cómo podría hacer que los círculos dibujados / líneas en CALayer tengan el mismo aspecto que los dibujados en UIView?


He tenido problemas con el dibujo pixelado en un CALayer en dispositivos retina anteriormente. (Supongo que está viendo el problema en los dispositivos Retina). Al hacer lo siguiente, solucioné el problema que estaba experimentando:

layer.contentsScale = [[UIScreen mainScreen] scale];

No debería necesitar lidiar con rasterización o antialiasing. En mi propio código, inicialmente había implementado dibujar algo en un UIView que luego cambié para CALayer en un CALayer , y simplemente estableciendo el contentsScale propiedad de CALayer hizo que ambos dibujaran de manera idéntica.