7 votes

Problèmes d'animation de l'alpha de UIView

Je tente d'appliquer un fondu à une UIView que j'ai créée de façon programmatique par-dessus une autre.

[UIView animateWithDuration:0.5 animations:^(void) {
    [self.view setAlpha:0];
}
                 completion:^(BOOL finished){
                     [self.view removeFromSuperview];
                 }];

L'événement finished est appelé correctement après exactement 0,5 secondes, mais je ne vois aucun fondu (je devrais voir la UIView en bas).

Si au lieu d'utiliser l'alpha, je déplace la UIView, ça marche (je vois la UIView en bas pendant que la UIView en haut glisse), donc le problème semble lié à l'alpha, mais je n'arrive pas à comprendre ce qui ne va pas !

[UIView animateWithDuration:0.5 animations:^(void) {
    CGRect o = self.view.frame;
    o.origin.x = 320;
    self.view.frame = o;
}
                 completion:^(BOOL finished){
                     [self.view removeFromSuperview];
                 }];

J'ai déjà utilisé des animations alpha précédemment et elles fonctionnaient de cette façon en général...

0voto

Alex R. R. Points 1888

J'ai exactement eu le même problème, et aucune des suggestions n'a fonctionné pour moi. J'ai surmonté le problème en utilisant l'opacité de la couche à la place. Voici le code pour afficher la couche (en utilisant Xamarin, mais vous aurez l'idée) :

        // Entrer dans la vue en fondu
        zoomView.Layer.Opacity = 0;

        UIApplication.SharedApplication.KeyWindow.RootViewController.View.Add(zoomView);

        UIView.AnimateNotify(
            0.15, // durée
            () => { zoomView.Layer.Opacity = 1.0f },
            (fini) => { }
        );

Et voici pour atténuer la même vue de zoom

UIView.AnimateNotify(
                0.15, // durée
                () => { zoomView.Layer.Opacity = 0; },
                (fini) =>
                {
                    if (fini)
                    {
                        zoomView.RemoveFromSuperview();
                    }
                }
            );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X