2008-10-31 7 views
5

Tengo una ventana que contiene un control NSBox. En ese NSBox hay varios otros controles, (ventanas emergentes, campos de texto, etc.)Vistas respaldadas por capas y controles de parpadeo

Tengo otros dos NSBox en el mismo archivo NIB que están llenos de controles que me gustaría intercambiar con el primero bajo ciertos condiciones Me gustaría que esto suceda con un bonito efecto de fundido encadenado, así que hacer lo siguiente:

En -awakeFromNib método del NSWindowController:

[[self.myWindow contentView] setWantsLayer:YES]; 

En mi método en el que estoy cambiando los puntos de vista que utilizo este código :

[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 

Esto funciona bien, las vistas se desvanecen como yo esperaba. El problema es que los controles de las vistas a veces desaparecen sin motivo aparente. No siempre son los mismos puntos de vista (aunque los NSPopUpButton parecen ser particularmente propensos), y generalmente reaparecen cuando tienen foco.

¿Tengo que hacer también todos los controles de la capa respaldada?


Actualización: Envolver la animación en una agrupación explícita no hizo ninguna diferencia. Activar setWantsLayer en el archivo Nib tampoco marcó la diferencia, pero lo interesante es que, cuando lo hice, los botones NSPopup desaparecen hasta que se hace clic en la vista que los contiene. Establecer Capa de forma manual en los botones de NSPopupup tampoco marcó la diferencia.

Parece que otros han tenido este problema, pero no puedo encontrar ninguna solución colocado:

http://www.cocoabuilder.com/archive/message/cocoa/2008/3/30/202691 http://www.cocoabuilder.com/archive/message/cocoa/2008/4/25/205134

+0

Yo también he tenido este problema con NSPopUpButtons y CALayers y no he encontrado una solución decente. –

Respuesta

4

Si una vista está respaldado capa de todas sus subvistas serán capa de respaldo, por lo que no es necesario configurarlos manualmente para que sean respaldados por capas. No sé si hay suficiente información para ver lo que está pasando aquí, pero sería curioso si se obtiene un comportamiento diferente si se coloca la animación en una agrupación explict:

[NSAnimationContext beginGrouping]; 
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 
[NSAnimationContext endGrouping]; 

Además, hay una razón por la cual está llamando a setWantsLayer: en awakeFromNib en lugar de solo configurarlo en el plumín (debe haber una casilla de verificación en el inspector NSView).

Cuestiones relacionadas