2010-02-14 8 views
1

Dans le passé, j'ai réussi à fondre dans un NSWindow en utilisant le code suivant;Animer setContent d'un NSWindow

if (![statusWindow isVisible]) 
    { 
statusWindow.alphaValue = 0.0; 
[statusWindow.animator setAlphaValue:1.0]; 
    } 

CAAnimation *anim = [CABasicAnimation animation]; 
[anim setDelegate:self]; 
[statusWindow setAnimations:[NSDictionary dictionaryWithObject:anim forKey:@"alphaValue"]]; 
[statusWindow makeKeyAndOrderFront:self]; 

Pour mon projet actuel, j'essaie de faire un flash similaire à celui de Photo Booth. J'ai créé un NSPanel blanc et planifiais de définir le contenu de mon NSWindow sur le panneau, et de le rétablir rapidement.

Est-il possible de définir le contentView d'un NSWindow en utilisant un joli effet de fondu?

P.S - S'il existe un moyen plus simple de savoir comment atteindre le flash, dites-le moi! Merci d'avance, Ricky.

Répondre

1

Pourquoi utiliser une autre fenêtre? Il semble que vous essayiez déjà d'utiliser CoreAnimation alors pourquoi ne pas simplement ajouter un calayer blanc à votre vue existante et animer son opacité?

+0

J'ai pensé à cela, mais je ne peux pas trouver un moyen d'ajouter une couche à un NSWindow? – Ricky

+0

En supposant que votre fenêtre entière utilise CA, vous pouvez obtenir l'affichage du contenu Windows avec [myWindow contentView], puis ajouter votre couche d'état à cela. Si vous définissez correctement le paramètre autoresizingMask, vous pouvez le faire conserver automatiquement la même taille que la fenêtre. –

+0

"mais je n'arrive pas à ajouter un calque à un NSWindow" Vous y pensez mal. Considérez NSWindow comme des conteneurs pour votre vue de contenu et d'autres fenêtres et NSView comme conteneurs pour d'autres vues et couches. Vous n'ajoutez jamais un calque directement à une fenêtre, seulement à une sous-vue de cette fenêtre (que ce soit -contentView ou une de vos propres vues) et très rarement vous permuterez le -contentView d'une NSWindow. Une maison va au sommet d'une fondation. Parfois, vous devrez réparer une fissure ou deux, mais vous ne le remplacerez pas après la construction de la maison. –