Tengo problemas para hacer que los bloques funcionen en Swift. Aquí hay un ejemplo que funcionó (sin bloque de finalización):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
o alternativamente sin el cierre final:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
pero una vez que trato de agregar el bloque de finalización, simplemente no funcionará:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
El autocompletar me da completion: ((Bool) -> Void)?
pero no estoy seguro de cómo hacerlo funcionar. También probé con cierre final pero obtuve el mismo error:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Actualización para 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#>
})
No uso el cierre final para el bloque de finalización porque creo que carece de claridad, pero si te gusta, puedes ver la respuesta de Trevor a continuación .
Respuestas:
el parámetro de finalización en animateWithDuration toma un bloque que toma un parámetro booleano. En swift, como en los bloques Obj C, debes especificar los parámetros que toma un cierre:
La parte importante aquí es el
(value: Bool) in
. Eso le dice al compilador que este cierre toma un Bool etiquetado como 'valor' y devuelve vacío.Como referencia, si quisiera escribir un cierre que devolviera un bool, la sintaxis sería
fuente
$0
para el primer argumento, simplemente usando la variable dentro del bloque, el compilador se da cuenta de que su bloque acepta un argumento.La conclusión es correcta, el cierre debe aceptar un
Bool
parámetro:(Bool) -> ()
. Tratarfuente
El subrayado solo junto con la
in
palabra clave ignorará la entradaSwift 2
Rápido 3, 4, 5
fuente
Existe mi solución anterior basada en la respuesta aceptada anterior. Desvanece una vista y la oculta una vez casi invisible.
Swift 2
Rápido 3, 4, 5
fuente
Aquí tienes, esto se compilará
Swift 2
Rápido 3, 4, 5
La razón por la que hice el área de Bool como un guión bajo es porque no está usando ese valor, si lo necesita, puede reemplazar el (_) con (value: Bool)
fuente
A veces, desea incluir esto en una variable para animar de diferentes maneras según la situación. Para eso necesitas
O puede usar el igualmente detallado:
Pero en cualquier caso, hay que indicar el
Bool
lugar.fuente
SWIFT 3.x + 4.x
Me gustaría hacer una actualización y simplificar las cosas.
El siguiente ejemplo se implementa en cualquiera
view
que se oculte lentamente y cuando sea completamente transparente; se quita del padreview
ok
La variable siempre regresatrue
con la terminación de la animación.fuente