2009-09-05 8 views
2

Je supprime un composant de WindowedApplication, en utilisant removeChildAt(), et je veux jouer un effet (défini dans le composant, disons mx: Resize) qui réduit la hauteur du composant (une hbox) à 0 avant de l'enlever. J'utilisais l'événement removedFromStage dans le composant, mais il disparaît juste (sans jouer l'effet)flex 3 effet de lecture removedFromStage

Je suppose que c'est retiré avant que l'effet soit joué. Existe-t-il un moyen de lire l'effet, qui est de préférence défini dans le composant, avant que la fonction removeChild ne soit terminée?

Merci.

Répondre

0

je me suis déplacé l'effet au parent si:

var contentBox:VBox = new VBox(); 
var cm:HBox = new Hbox(); 
cm.setStyle('removedEffect', CloseDown); 
contentBox.addChildAt(cm, 0); 
//in another function 
contentBox.removeChild(0); 

Cela fonctionne. Quand j'ai eu l'effet dans le composant lui-même, cela n'a pas fonctionné, hélas.

0

removedFromStage va être déclenché après que le composant a été supprimé (approprié pour la gestion du nettoyage/de la mémoire). La plupart des composants Flex ont une propriété removedEffect. C'est ce que vous voulez utiliser.

+0

C'est plus ce que je cherchais. J'ai essayé de l'utiliser à la fois dans le nœud racine Component et en tant que 'setStyle', mais dans les deux cas, le composant redimensionne rapidement puis revient à sa hauteur d'origine (et n'est pas supprimé). Mon redimensionnement est très basique, et ressemble à: Des idées? Merci. – Ian

0

Veuillez consulter la page d'aide de la classe mx.effects.Resize sous Flex Builder et consultez la liste des événements.

Fondamentalement, ce que vous devez faire avec votre code est:

  1. créer l'événement resize.

  2. ajouter un écouteur d'événement pour l'effet fin

  3. jouer l'effet

  4. lorsque l'effet est terminée, vous fermez la fenêtre.

Le code devrait ressembler à:

public function close():void 
{ 
    var resize:Resize = new Resize(); 
    resize.heightTo  = 0; 
    resize.duration  = 500; 
    resize.addEventListener(EffectEvent.EFFECT_END, onCloseEffectEndHandler); 

    resize.play([this]);  

} 

private function onCloseEffectEndHandler(event:EffectEvent):void 
{ 
    PopUpManager.removePopUp(this); 
} 

REMARQUE: lorsque vous affichez la fenêtre NE PAS OUBLIER de régler la hauteur, SINON IL RESTER 0 ET VOUS VOIR RIEN!