8
votes

L'amortissage UIView permet de voir les sous-espions

J'ai un uiscrollview code> qui contient diverses sous-visions ( uiimageviews code>, uilabels code> et standard uIViews code>). Certaines des uiimageviews code> sont partiellement couvertes par d'autres uIViews code>.

Cependant, lorsque je déchaîne le Uiscrollview code>, les parties partiellement couvertes du uiImageviews code> sont exposées pour le bref moment de l'animation. P>

Je veux être capable de fader la vision de ScrollView et de tout ce qu'il contient en même temps dans la même animation - c'est-à-dire ne révélant aucune des images partiellement couvertes. P>

Si ce n'est pas possible , Je peux toujours ajouter un uiview code> sur tous les autres commandes et la fondue de l'alpha 0 jusqu'à 1 pour tout cacher, mais je suis sûr qu'il y a un moyen d'effectuer une fade complète sur une vue et Toutes ses sous-espages. P>

J'ai essayé ceci: p> xxx pré>

et j'ai essayé ceci: p>

- (IBAction)questionGroupChanged:(UIButton*)sender {
    [UIView beginAnimations:nil context:NULL];
    [self fadeViewHierarchy:scrollViewResults toAlpha:0.0f];
    [UIView commitAnimations];
}

- (void)fadeViewHierarchy:(UIView*)parentView toAlpha:(float)alpha {
    [parentView setAlpha:alpha];
    for (UIView *subView in parentView.subviews) {
        [self fadeViewHierarchy:subView toAlpha:alpha];
    }
}


0 commentaires

3 Réponses :


-2
votes

Avez-vous essayé avec UIView Classe Méthodes + AnimateWithDuration: * (disponible sur iOS 4 et +)

J'aime: p>

- (void)fadeAllViews
{
     [UIView animateWithDuration:2
     animations:^{
         for (UIView *view in allViewsToFade)
             view.alpha = 0.0;
     }
     completion:^(BOOL finished){}
     ];
}


0 commentaires

14
votes

Cela se produit à cause de la façon dont le compositeur fonctionne. Vous devez activer la rasâtre sur la couche de la vue lors de la décoloration in / une sortie:

view.layer.shouldRasterize = YES;


1 commentaires

N'oubliez pas non plus de définir l'échelle appropriée, sinon vos amateurs de rasterized auront l'air de Shitty sur des écrans de rétine. Voir.Layer.RasterizationCale = [UISCREEN Mainscreen] .cale;



5
votes

La réponse de Mike est la bonne et il mérite tout crédit pour cela. Juste pour illustrer, il pourrait ressembler à: xxx pré>

Ainsi, en utilisant votre ScrollViewresults code>, il serait appelé comme suit: P>

[self fadeView:scrollViewResults toAlpha:0.0f];


1 commentaires

Merci pour l'illustration @rob