En primer lugar, encuentro que los documentos en línea de iPhone no son tan claros en lo que respecta a las diversas formas de renderizar una capa. Entiendo lo que quiero decir, pero no estoy claro cuándo usar qué métodos y cuál requiere que la capa se agregue como sub capa o no.Problemas de dibujo con CALayer
Mi proyecto comenzó trivialmente cargando imágenes y simplemente dibujándolas en una UIView a través de [image drawAtPoint:] así como [image drawInRect:]. Funcionan bien utilizando el contexto gráfico actual.
Entonces, hoy he leído este concepto de usar capas, por lo que animar mis varias imágenes (implícitamente) en teoría sería muy fácil.
Para el registro, sé que los documentos dicen que la subclase de CALayer es innecesaria, pero lo hice. Ahora estoy increíblemente confundido acerca de las diferentes maneras de supuestamente renderizar una capa.
- drawLayer
- displayLayer
- pantalla
- drawInContext
Ahora, para todos estos métodos, es necesario ajustar el tamaño de fotograma de la capa? ¿Es necesario agregar una capa a la capa de una vista?
El único método que me da resultados visibles es el método drawinContext. Pero si aplico una animación implícita (por ejemplo, image.opacity = 0) no ocurre nada, lo que me hace creer que mi capa no está configurada correctamente.
Alguien por favor traiga el orden a este caos.
Lo que terminé haciendo es crear subclases (porque mis objetos son complicados) y configuré el delegado por sí mismo. Así que básicamente estoy usando displayLayer. Todo lo que necesito hacer es llamar al setNeedsDisplay de la capa. Así que ahora la pregunta aún permanece sobre el uso de drawInContext y drawLayer: inContext. ¿Se llaman de forma manual o se llaman internamente a través de SetNeedsDisplay? Solo curiosidad ahora. – AlvinfromDiaspar
Aquí hay una pregunta de seguimiento más pertinente: Ahora puedo renderizar en una capa usando la capa drawLayer: (CALayer *). Sin embargo, si deseo actualizar la representación, digamos un marco de animación, en la capa, si configuro el contenido de la capa con una imagen * actualizada, el contenido desaparece en la pantalla. ¿Debo quitar la capa y luego renderizarla y luego volver a agregarla al árbol de renderizado? Si este es el caso, ¡esto sopla! – AlvinfromDiaspar
A su primera pregunta: drawInContext: nunca se debe invocar directamente, sino que indirectamente se activa mediante setNeedsDisplay. Si no ha anulado el método, creo que llama al delegado para ayudarlo a mostrar el contenido mediante -drawLayer: inContext: –