J'ai du mal à faire fonctionner les blocs sur Swift. Voici un exemple qui a fonctionné (sans bloc d'achèvement):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
ou bien sans la fermeture arrière:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
mais une fois que j'essaye d'ajouter le bloc d'achèvement, cela ne fonctionnera tout simplement pas:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
La saisie semi-automatique me donne completion: ((Bool) -> Void)?
mais je ne sais pas comment le faire fonctionner. Également essayé avec la fermeture de fin mais a obtenu la même erreur:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Mise à jour pour Swift 3/4:
// This is how I do regular animation blocks
UIView.animate(withDuration: 0.2) {
<#code#>
}
// Or with a completion block
UIView.animate(withDuration: 0.2, animations: {
<#code#>
}, completion: { _ in
<#code#>
})
Je n'utilise pas la fermeture de fin pour le bloc de complétion car je pense que cela manque de clarté, mais si vous l'aimez, vous pouvez voir la réponse de Trevor ci-dessous .
Réponses:
le paramètre de complétion dans animateWithDuration prend un bloc qui prend un paramètre booléen. En swift, comme dans les blocs Obj C, vous devez spécifier les paramètres qu'une fermeture prend:
La partie importante ici est le
(value: Bool) in
. Cela indique au compilateur que cette fermeture prend un Bool étiqueté «valeur» et renvoie void.Pour référence, si vous vouliez écrire une fermeture qui retournait un booléen, la syntaxe serait
la source
$0
pour le premier argument, en utilisant simplement la variable à l'intérieur du bloc, le compilateur comprend que votre bloc accepte un argument.La finition est correcte, la fermeture doit accepter un
Bool
paramètre:(Bool) -> ()
. Essayerla source
Soulignez par lui-même aux côtés du
in
mot clé ignorera l'entréeSwift 2
Swift 3, 4, 5
la source
Il y a ma solution ci-dessus basée sur la réponse acceptée ci-dessus. Il fait disparaître une vue et la cache autrefois presque invisible.
Swift 2
Swift 3, 4, 5
la source
Ici vous allez, cela va compiler
Swift 2
Swift 3, 4, 5
La raison pour laquelle j'ai fait de la zone booléenne un trait de soulignement est que vous n'utilisez pas cette valeur, si vous en avez besoin, vous pouvez remplacer le (_) par (valeur: Bool)
la source
Parfois, vous voulez lancer ceci dans une variable pour animer de différentes manières selon la situation. Pour cela, vous avez besoin
Ou vous pouvez utiliser le tout aussi verbeux:
Mais dans tous les cas, vous devez indiquer le
Bool
quelque part.la source
SWIFT 3.x + 4.x
J'aimerais faire une mise à jour et simplifier les choses.
L'exemple ci-dessous est implémenté dans tout ce
view
qu'il se cache lentement et lorsqu'il est complètement transparent; le supprime du parentview
ok
variable retournera toujourstrue
avec la fin de l'animation.la source