Estou tendo problemas para fazer os blocos funcionarem no Swift. Aqui está um exemplo que funcionou (sem bloco de conclusão):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
ou, alternativamente, sem o fechamento final:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
mas depois que tento adicionar o bloco de conclusão, ele simplesmente não funciona:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
O autocomplete me dá, completion: ((Bool) -> Void)?
mas não tenho certeza de como fazê-lo funcionar. Também tentei com o fechamento à direita, mas obteve o mesmo erro:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Atualização 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#>
})
Não uso o fechamento à direita para o bloco de conclusão porque acho que falta clareza, mas se você gostar, poderá ver a resposta de Trevor abaixo .
Respostas:
o parâmetro de conclusão em animateWithDuration leva um bloco que leva um parâmetro booleano. Em swift, como nos blocos Obj C, você deve especificar os parâmetros que um fechamento leva:
A parte importante aqui é o
(value: Bool) in
. Isso informa ao compilador que esse encerramento recebe um Bool rotulado como 'valor' e retorna void.Para referência, se você quisesse escrever um encerramento que retornasse um bool, a sintaxe seria
fonte
$0
para o primeiro argumento, apenas usando a variável dentro do bloco, o compilador descobre que seu bloco aceita um argumento.A conclusão é correta, o fechamento deve aceitar um
Bool
parâmetro:(Bool) -> ()
. Experimentarfonte
O sublinhado por si só ao lado da
in
palavra - chave irá ignorar a entradaSwift 2
Swift 3, 4, 5
fonte
Esta é a minha solução acima com base na resposta aceita acima. Ele esmaece uma visão e a esconde, antes quase invisível.
Swift 2
Swift 3, 4, 5
fonte
Aqui está, isso irá compilar
Swift 2
Swift 3, 4, 5
A razão de eu ter tornado a área do Bool um sublinhado é porque você não está usando esse valor, se precisar, pode substituir o (_) por (valor: Bool)
fonte
Às vezes, você deseja lançar isso em uma variável para animar de maneiras diferentes, dependendo da situação. Para isso você precisa
Ou você pode usar o igualmente prolixo:
Mas em qualquer caso, você deve indicar o
Bool
lugar.fonte
SWIFT 3.x + 4.x
Gostaria de fazer uma atualização e simplificar as coisas.
O exemplo abaixo é implementado em qualquer
view
um está se escondendo lentamente e quando está completamente transparente; remove-se dos paisview
ok
variável sempre retornarátrue
com o término da animação.fonte