2010-04-07 21 views
5

Esto no es realmente una pregunta porque acabo de resolver el problema, pero creo que la naturaleza del problema es común para muchos desarrolladores de iPhone y la solución no era realmente obvia, así que quería comparte mi experiencia Para mantener el formato de "pregunta/respuesta" de StackOverflow, voy a poner los detalles en la pregunta y mi solución en la respuesta.UITableView rendimiento de desplazamiento con CALayer + máscara

Detalles:

yo tuvimos una tableview llena de células con dos etiquetas y un control de interruptor de palanca a medida que arme a partir de cero. Si escondí el control de alternar, la vista de tabla se desplazó como un campeón. Sin embargo, con el control de alternar mostrado, el desplazamiento fue muy lento/agitado en el iPhone 3G. Mis celdas de tabla no tienen componentes transparentes (que no sean la máscara de la capa) y estoy reutilizando las celdas.

El control de alternar personalizado extiende UIButton y su capa tiene dos componentes: un UIImageView que contiene la parte deslizante "interruptor" de la palanca y una elipse alargada que se usa como máscara, con un fondo dibujado detrás de la capa en -drawRect: .

¿Cómo lo solucioné? La respuesta viene en breve ...

Respuesta

6

Descubrí que la fuente de la lentitud/picado viene de volver a componer la Capa con la subcapa de máscara al desplazarse. Creo que fue necesario volver a dibujar el interruptor cada vez que se volvía a dibujar la pantalla.

Mi solución es ocultar la máscara/capa del conmutador a menos que esté cambiando el estado. Cuando está completamente en las posiciones de encendido y apagado, oculto la capa del interruptor de palanca y la reemplazo por una imagen del interruptor de palanca. Cuando el usuario toca la palanca, la imagen ficticia se esconde, el componente real del conmutador muestra y realiza la animación en el estado opuesto. Cuando termina la animación, oculto el componente del interruptor de alternar y muestro la imagen ficticia, asegurándome de cambiar la imagen al estado actual. Este rendimiento de desplazamiento mejorado SIGNIFICATIVAMENTE ... Me atrevo a decir que es casi tan bueno como una celda nativa de tableview.

Cuestiones relacionadas