2009-05-25 15 views

Respuesta

19

Me gustaría obtener más información acerca de dónde está viendo esto, pero mi sospecha es que se está refiriendo a una imagen que no está alineada con píxeles. Quartz le permite dibujar en píxeles fraccionarios (recuerde que CGPoint toma CGFloats, no NSIntegers), pero es más costoso y tiende a crear un poco borroso. Realmente no se puede dibujar en un píxel fraccionario, por lo que Quartz tiene que hacer anti-aliasing para lograrlo. Eso lleva tiempo y ciertamente dañaría el rendimiento de Core Animation.

Quartz no le advertirá que está dibujando en píxeles fraccionarios, y es particularmente desagradable al texto. Por lo tanto, es algo en lo que debe pensar cada vez que realice un diseño programático.

+2

Sí, eso es lo que significa la imagen desalineada. – Kriem

+0

Gracias por la pista. De hecho, tenía valores de coma flotante para las coordenadas de origen del marco. Después de envolverlos por un piso() el mensaje en Insturment desapareció. Pero no pude reconocer ninguna mejora en el rendimiento. Los instrumentos se quejan de esto también cuando se gira un UIImageView. Así que creo que no es nada malo;) – Thanks

+0

Es cierto cuando se produce una escala, por ejemplo, si el ancho o alto de una vista de imagen no coincide con los límites de la imagen de origen o cuando una vista tiene una transformación afín aplicada. –

2

Las vistas desalineadas fuerzan al renderizador a un anti-alias antes de que se dibujen. En este contexto, "desalineado" significa que el punto de visualización solicitado no se asigna directamente a un píxel de pantalla (por ejemplo, podría estar entre dos píxeles) y debe ser dibujado a dos píxeles contiguos y alias para dar la ilusión de que fue dibujado "entre" ellos.

Esto ocurre casi siempre cuando se calcula el marco de una vista (en lugar de especificarlo en Interface Builder) porque una coordenada X de CGRect, coordenada Y, ancho y alto son gráficos CGF y permiten valores fraccionarios.

Por ejemplo, una caja de 100.8px por 50.1px centrada en (200.5, 35.5) es un marco válido y el sistema operativo intentará hacerlo lo mejor que pueda. La sobrecarga adicional de interpolación y antialiasing necesaria para un solo píxel es suficiente para perjudicar gravemente el rendimiento en hardware más antiguo.

Cuestiones relacionadas