Dans iOS 4 et versions ultérieures, il existe un moyen de le faire en utilisant simplement la méthode de transition UIView sans avoir besoin d'importer QuartzCore. Vous pouvez simplement dire:
Objectif c
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
Rapide
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
Solution précédente
La solution de Michail fonctionnera, mais ce n'est pas vraiment la meilleure approche.
Le problème avec le fondu alpha est que parfois les différentes couches de vue qui se chevauchent semblent étranges lorsqu'elles disparaissent. Il existe d'autres alternatives utilisant Core Animation. Incluez d'abord le framework QuartzCore dans votre application et ajoutez-le #import <QuartzCore/QuartzCore.h>
à votre en-tête. Vous pouvez maintenant effectuer l'une des opérations suivantes:
1) définissez button.layer.shouldRasterize = YES;
puis utilisez le code d'animation alpha que Michail a fourni dans sa réponse. Cela empêchera les calques de se mélanger de manière étrange, mais entraînera une légère pénalité en termes de performances et peut rendre le bouton flou s'il n'est pas aligné exactement sur une limite de pixel.
Alternativement:
2) Utilisez le code suivant pour animer le fondu à la place:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
La bonne chose à propos de cette approche est que vous pouvez fondre toutes les propriétés du bouton même si elles ne peuvent pas être animées (par exemple, le texte ou l'image du bouton), configurez simplement la transition et définissez vos propriétés immédiatement après.
transitionWithView
paramètre pour garantir un fondu entrant et sortant réussi.Les propriétés animées UIView sont:
isHidden
n'est pas l'un d'entre eux, donc selon moi, le meilleur moyen est:Swift 4:
Objectif c:
la source
Pour disparaître:
Objectif c
Swift 2
Swift 3, 4, 5
Pour s'estomper:
Objectif c
Swift 2
Swift 3, 4, 5
la source
J'utilise cette petite extension Swift 3 :
la source
Swift 3
la source
rapide 4.2
avec extension:
méthode simple:
la source
Utilisez cette solution pour des effets de fondu et de fondu en douceur
l'utilisation est comme
Merci
la source
fadeOut
fonctionne sur iOS 13 uniquement si je supprime les lignes définiesself.isHidden
.J'ai créé pour la catégorie
UIView
à cet effet et mis en œuvre un peu spécial bit concept différent:visibility
. La principale différence de ma solution est que vous pouvez appeler[view setVisible:NO animated:YES]
et juste après cette vérification synchrone[view visible]
et obtenir un résultat correct. C'est assez simple mais extrêmement utile.De plus, il est permis d'éviter d'utiliser la "logique booléenne négative" (voir Code complet, page 279, Utiliser des noms de variables booléennes positifs pour plus d'informations).
Rapide
UIView+Visibility.swift
Objectif c
UIView+Visibility.h
UIView+Visibility.m
la source
le code de @Umair Afzal fonctionne bien dans Swift 5 après quelques changements
pour utilisation
la source
Swift 4
Et pour l'utiliser, appelez simplement ces fonctions comme:
la source
isHidden
est une valeur immédiate et vous ne pouvez pas affecter une animation dessus, au lieu de cela, vous pouvez utiliser Alpha pour masquer votre vueEt pour montrer:
la source
Vous pouvez le faire TRÈS facilement en utilisant la bibliothèque Animatics :
la source
la source
Vous pouvez essayer ceci.
Et passez votre nom de vue
la source
Si votre vue est définie sur Caché par défaut ou si vous modifiez l'état Caché, ce que je pense que vous devriez dans de nombreux cas, aucune des approches de cette page ne vous donnera à la fois une animation FadeIn / FadeOut, elle n'animera qu'un de ces états, la raison en est que vous définissez l'état Caché sur false avant d'appeler UIView.animate méthode , ce qui provoquera une visibilité soudaine et si vous que l'alpha, l'espace objet est toujours là mais il n'est pas visible, ce qui entraînera des problèmes d'interface utilisateur.
La meilleure approche consiste donc à vérifier d'abord si la vue est masquée, puis à définir l'alpha sur 0,0, comme ceci lorsque vous définissez l'état Caché sur false, vous ne verrez pas une visibilité soudaine.
la source
La fonction UIView.transition (avec :) est agréable et soignée.
Beaucoup l'ont publié, mais aucun n'a remarqué qu'il y a une erreur qui n'apparaîtra que lorsque vous l'exécuterez.
Vous pouvez parfaitement faire passer la propriété cachée à true, tandis que lorsque vous tentez de la faire passer à false, la vue disparaîtra soudainement sans aucune animation.
En effet, cette API ne fonctionne que dans une vue, ce qui signifie que lorsque vous passez d'une vue à afficher, en fait elle-même s'affiche immédiatement, seul son contenu est animé progressivement.
Lorsque vous essayez de masquer cette vue, elle-même se cache tout de suite, rend l'animation à son contenu sans signification.
Pour résoudre ce problème, lorsque vous masquez une vue, la cible de la transition doit être sa vue parente au lieu de la vue que vous souhaitez masquer.
la source
Ma solution pour Swift 3 . Donc, j'ai créé la fonction, qui cache / affiche la vue dans le bon ordre (lors du masquage - définissez alpha sur 0 puis isHidden sur true; unhiding - révélez d'abord la vue, puis définissez son alpha sur 1):
la source
completion
bloc il y a une autre animation quandhide
est faux?Transition Swift 4
Si vous utilisez l'approche pour les anciennes versions de Swift, vous obtiendrez une erreur:
Référence utile .
la source
isHidden
valeur est rendue instantanément (c.-à-d. masquant / affichant instantanément la vue).la source
J'ai essayé certaines des réponses abandonnées, certaines ne fonctionnent que pour une situation, certaines d'entre elles doivent ajouter deux fonctions.
Option 1
Rien à voir avec
view.isHidden
.Puis passe
isFadeIn
(true
oufalse
)Option 2
Ne passez aucun paramètre. Il s'estompe ou disparaît selon
isUserInteractionEnabled
. Cela convient également très bien à la situation animée d'avant en arrière.Alors tu appelles
C'est tout. Ça me coûte du temps, j'espère que ça aide quelqu'un.
la source