Estoy agregando varios CALayers como subcapas de la capa de un UIView. El contenido de cada capa es una imagen diferente descargada de un servidor. Cada capa está animada desde fuera de pantalla a una posición generada aleatoriamente. Los datos de imagen se descargan de manera asincrónica. Cada imagen es aproximadamente 300x300 o más pequeña.¿Optimizaciones CALayer?
Como resultado de la colocación aleatoria, las capas se superponen y algunas quedan oscurecidas por las capas que están encima de ellas. Esto está todo bien.
Estoy eliminando capas, ya que se oscurecen por completo al ver la sugerencia en the answer to this question Los cálculos para determinar la cobertura se producen en un hilo separado.
Tengo un UIPanGestureRecognizer que permite al usuario arrastrar las capas en la pantalla.
Me encuentro con un problema de rendimiento cuando la cantidad de capas agregadas se aproxima a 25-30 y empeora progresivamente. Las animaciones se vuelven entrecortadas y a menudo están completamente ausentes (las capas recién agregadas simplemente aparecen en su posición final). Y los gestos de panoramización se ignoran o dan como resultado un reposicionamiento picado de la capa seleccionada.
Supongo que estoy matando a la GPU con todas las capas superpuestas y otra capa animando arriba?
¿Alguna sugerencia sobre cómo mejorar el rendimiento?
¿Mejores prácticas para manejar grandes cantidades de capas?
¿Es mejor que la capa comience animada en una capa de vista separada que las capas agregadas anteriormente?
Gracias!
Gracias Bill. Lo intentaré. Tenía la impresión de que opaco se ignoraba al suministrar layer.contents (¿solo se usa cuando se dibuja una capa?). El bit alfa será más complicado: estoy usando un borde transparente ancho de 2 píxeles alrededor del borde de las imágenes para suavizar los bordes girados. ¡Fuera a Instrumentos! – TomH
Hola Tom - yep opaque se ignora a menos que dibuje, puedes pensar que es el 2º arg de UIGraphicsBeginImageContextWithOptions, si tu contenido tiene un canal alfa, entonces la capa será transparente - si tienes tiempo, archiva un error sobre el indicador edgeAntialiasingMask –
Increíble.He estado agregando un canal alfa a mi UIImage, agregando un borde transparente de 2 píxeles y luego usando la imagen como contenido de la capa. El rendimiento se mejora mucho al no agregar el borde alfa y transparente, no hay problemas con> 30 capas. Lamentablemente, edgeAntialiasingMask no parece tener ningún efecto. Voy a presentar un error. – TomH