¿Cargar una imagen o usar CGGradient de manera más eficiente?

Estoy experimentando con algunas cosas para una nueva interfaz de usuario en una de mis aplicaciones. Me pregunto cuál es la forma más eficiente de agregar elementos de la interfaz de usuario como un fondo degradado (teniendo en cuenta tanto el tamaño de la aplicación como el consumo de velocidad/memoria).

¿Sería mejor simplemente crear los elementos en algo como Inkscape o Illustrator, y luego cargarlos a través de UIImage>UIIMageView? O sería mejor usar CGgradiente or CAGradientLayer?

Además, me pregunto sobre este tipo de cosas con bastante frecuencia y me pregunto si alguien podría explicarme cómo podría probar este tipo de cosas por mí mismo (velocidad, consumo de memoria, rendimiento general).

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

Los CAGradientLayers son bastante buenos. Casi siempre preferiría dibujar degradados usando CGGradient o CAGradientLayer en lugar de usar imágenes, especialmente porque no es necesario incluir combinaciones de retina/no retina, iPhone/iPad, y cambiar los colores se convierte en un cuestión de ajustar una línea de código en lugar de regenerar una serie completa de imágenes en su software de imágenes.

Si también está haciendo otro dibujo en drawRect, dibuje con un CGGradient. Si solo desea un fondo, use CAGradientLayer.

Puede analizar el rendimiento utilizando Instrumentos (producto --> perfil en XCode)

  • la herramienta de animación central le dará fotogramas por segundo si hay desplazamiento/animación
  • la herramienta de perfilado de tiempo le mostrará qué funciones están ocupando su tiempo
  • las diversas herramientas de memoria le mostrarán el consumo de memoria

Respondido el 12 de junio de 12 a las 17:06

Gracias jrturton. ¿Alguna idea (sin que me revise) cuál es mejor para el rendimiento? - DaveMac

Realmente depende de qué más estés haciendo con la vista. Comenzaría con la implementación más simple (cagradientlayer, IMO) y buscaría en otra parte si el rendimiento no es satisfactorio. Si no se está desplazando o animando, el rendimiento es irrelevante. - jrturton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.