Diferencias de rendimiento del iPhone en el dibujo de cuarzo frente a las imágenes precocidas (lo que supongo que se simplifica en el de cuarzo frente al de cuarzo)

StackOverflow https://stackoverflow.com/questions/1604341

Pregunta

Nuevo en Quartz y tengo curiosidad por las velocidades de dibujo de formas simples, degradados y sombras; comparando específicamente las funciones de dibujo de cuarzo con el dibujo de imagen de cuarzo en el iPhone.

Diga que necesito dibujar un rectángulo relleno, trazado y sombreado. Supongo que importar un rectificado precocido como PNG y dibujarlo usando drawInRect: o drawAtPoint: es más rápido que usar las funciones de dibujo de Quartz para dibujar lo mismo, ya que este último requiere cálculos explícitos. Por otro lado, al dibujar una imagen, asumo que aumenta el uso de memoria y el tamaño de la aplicación, ya que tengo que importar la imagen y luego asignarla. ¿Esto suena bien?

Además de eso, ¿existen grandes ventajas / desventajas para cualquiera de las técnicas? Como alguien que está muy familiarizado con los programas de gráficos y completamente nuevo en Quartz, estoy tratando de decidir si hay alguna ventaja en el uso de las funciones de dibujo en mi código en lugar de pre-hornear toda la interfaz de usuario e importar las imágenes.

¿Fue útil?

Solución

Tuve una pregunta similar, así que programé los diferentes enfoques. En la mayoría de los casos de dibujo simples (como el ejemplo de un rectángulo), la carga de una imagen desde el disco parece ser un poco más lenta que la del dibujo, tal vez debido al acceso requerido al disco. En esos casos, me decidí a usar las rutinas de dibujo de cuarzo, simplemente por la flexibilidad que me dan. Si quiero cambiar el tamaño de un elemento de la interfaz de usuario en el futuro (tal vez para admitir una pantalla de mayor resolución o resolución), necesitaría volver a renderizar todas mis imágenes, donde los dibujos vectoriales se escalarán según sea necesario.

Un área en la que vi una importante ganancia de rendimiento es para un gran gradiente radial que dibujé como fondo. En Shark, pude ver que la llamada CGContextDrawRadialGradient () estaba consumiendo una gran cantidad de tiempo de CPU. Cuando reemplacé el degradado radial de cuarzo con una imagen estática, noté una reducción notable en el tiempo de inicio de la aplicación (este fondo se coloca durante el inicio de la aplicación). Curiosamente, también noté una reducción en el uso de la memoria de la aplicación en aproximadamente 0.5 MB, lo cual no puedo explicar completamente.

Si desea probar esto usted mismo, le recomiendo que seleccione el editor de imágenes Opacity , que puede generar El código de cuarzo para un dibujo (incluida una subclase UIView o CALayer completa), así como la salida de un PNG de ese mismo dibujo. Esto hace que sea trivial implementar ambas rutas dentro de su aplicación y probarlas.

Otros consejos

También hay un punto intermedio que podría funcionar, dependiendo de la estructura de la aplicación: implementar el código de dibujo, pero dibujar en una capa y luego reutilizarlo. Esto tiene la ventaja de no masticar el tiempo de CPU más de una vez, sino de mantener el proceso de dibujo dinámico.

Entonces, digamos, cuando la tableta finalmente se envíe (¡cualquier día ahora!), puede volver a trabajar un poco los parámetros de dibujo para cubrir todos los dispositivos posibles, en lugar de generar un montón de imágenes estáticas diferentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top