J'ai une UIView EmptyCollectionView
, que j'affiche lorsque UICollectionView est vide. Voici comment je fonctionne: je crée UIView et addSubview
dans viewDidLoad de mon ViewController, puis modifie la propriété de basculement isHidden de la vue (ainsi que la vue de collection) selon les besoins.
J'aimerais peaufiner un peu les choses maintenant que la fonction principale est opérationnelle et que je ne souhaite pas ajouter d'animation subtile aux sous-vues contenues dans ma vue vide, telle que faire en sorte que le rebond imageview
contenu soit affiché.
Ma question est donc la suivante: quel est le meilleur moyen de détecter si la variable UIView
est affichée (c’est-à-dire qu’il existe un rappel de type viewDidAppear
que je pourrais utiliser)?
Question supplémentaire: je suis nouveau dans ce domaine ... L'ajout de la vue vide et le basculement de la propriété isHidden sont-ils un bon moyen de le faire? Ou devrais-je le faire d'une manière différente? (c.-à-d. devrais-je plutôt créer et détruire la vue au besoin, plutôt que de la conserver)
Merci
Cela fonctionne, j'espère que cela peut vous aider. Pour masquer la vue:
UIView.animate(withDuration: 0.3/*Animation Duration second*/, animations: {
self.EmptyCollectionView.alpha = 0
}, completion: {
(value: Bool) in
self.EmptyCollectionView.isHidden = true
})
Pour afficher la vue:
self.EmptyCollectionView.isHidden = false
UIView.animate(withDuration: 0.3, animations: {
self.EmptyCollectionView.alpha = 1
}, completion: nil)
Le meilleur moyen à mon avis est d'étendre UIView
extension UIView {
func fadeIn(_ duration: TimeInterval? = 0.2, onCompletion: (() -> Void)? = nil) {
self.alpha = 0
self.isHidden = false
UIView.animate(withDuration: duration!,
animations: { self.alpha = 1 },
completion: { (value: Bool) in
if let complete = onCompletion { complete() }
}
)
}
func fadeOut(_ duration: TimeInterval? = 0.2, onCompletion: (() -> Void)? = nil) {
UIView.animate(withDuration: duration!,
animations: { self.alpha = 0 },
completion: { (value: Bool) in
self.isHidden = true
if let complete = onCompletion { complete() }
}
)
}
}
Il vous suffit donc d'appeler view.fadeIn()
pour une animation par défaut de 0,2 seconde, ou view.fadeIn(1)
pour la faire durer une seconde.
Vous pouvez même ajouter un événement d'achèvement:
view.fadeOut(0.5, onCompletion: {
print("Animation completed, do whatever you want")
})
Extension Swift 4.2 pour autoriser l'animation lorsque l'option isHidden est définie sur une classe UIView:
extension UIView {
func setIsHidden(_ hidden: Bool, animated: Bool) {
if animated {
if self.isHidden && !hidden {
self.alpha = 0.0
self.isHidden = false
}
UIView.animate(withDuration: 0.2, animations: {
self.alpha = hidden ? 0.0 : 1.0
}) { (complete) in
self.isHidden = hidden
}
} else {
self.isHidden = hidden
}
}
}
Vous pouvez animer la propriété alpha de EmptyCollectionView sur 0 pour masquer ou sur 1 pour afficher
UIView.animate(withDuration: 0.5) {
self.EmptyCollectionView.alpha = 0
}
Assurez-vous également que isOpaque property est défini sur False pour activer la transparence de la vue.