tengo una vista de capas de alojamiento establecido así en una subclase personalizada NSView
:setNeedsDisplay Calling: SÍ a la capa de alojamiento de vista no se vuelve a dibujar la vista
[self setLayer:rootLayer];
[self setWantsLayer:YES];
agrego todas las subcapas al árbol de capas después de llamar al setNeedsDisplay
en cada subcapa. El contenido de cada capa es proporcionado por un método drawLayer:inContext
del delegado de mi capa.
Aquí está mi problema:
Después de inicializar mi opinión, la vista se dibuja correctamente. Sin embargo, cuando el modelo ha cambiado y llamo al [myCustomView setNeedsDisplay:YES];
desde mi controlador de vista, no se llama al drawLayer:inContext
.
Estoy confundido ahora cómo actualizar la vista:
- ¿Tengo que llamar al método
setNeedsDisplay
en cada CALayer en el árbol de capas? - ¿No debería la llamada de
setNeedsDisplay:YES
en la vista de alojamiento de capa desencadenar el redibujado de todo el árbol de capa?
Gracias por su ayuda.
Editar
he encontrado algo en la Clase NSView referencia
Una vista capa respaldados es una vista que está respaldada por una capa de núcleo de animación. Cualquier dibujo realizado por la vista se almacena en caché en la capa de respaldo. Configuró una vista respaldada por capa simplemente invocando setWantsLayer: con un valor de SÍ. La clase de vista creará automáticamente una capa de respaldo para usted, y usted utilizará los mecanismos de dibujo de la clase de vista. Cuando utilice vistas respaldadas por capas, nunca debe interactuar directamente con la capa.
Una vista de alojamiento de capa es una vista que contiene una capa de animación principal que tiene la intención de manipular directamente. Usted crea una vista de alojamiento de capa instanciando una instancia de una clase de capa Core Animation y configurando esa capa utilizando el método setLayer: de la vista. Después de hacerlo, invocarás setWantsLayer: con un valor de SÍ. Al usar una vista de alojamiento de capa, no debe confiar en la vista para dibujar, ni debe agregar subvistas a la vista de alojamiento de capa.
En mi caso, tengo una vista de capas de alojamiento. Entonces, ¿eso significa que tengo que desencadenar el redibujado manualmente? ¿Debo implementar un método pseudo drawRect en el NSView personalizado para llamar al setNeedsDisplay apropiado en los CALayers que cambiaron?
Su enlace al código de ejemplo está roto, quizás este es el reemplazo: https://developer.apple.com/library/mac/samplecode/CoreAnimationKioskStyleMenu/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40009512 –