Ich habe Probleme damit, dass die Blöcke auf Swift funktionieren. Hier ist ein Beispiel, das funktioniert hat (ohne Abschlussblock):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
oder alternativ ohne den nachlaufenden Verschluss:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
Aber wenn ich einmal versuche, den Abschlussblock hinzuzufügen, funktioniert es einfach nicht mehr:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
Die automatische Vervollständigung gibt mir completion: ((Bool) -> Void)?
aber nicht sicher, wie es funktioniert. Auch mit Trailing Closure versucht, bekam aber den gleichen Fehler:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Update für 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#>
})
Ich verwende den nachfolgenden Verschluss nicht für den Abschlussblock, weil ich denke, dass er nicht klar genug ist, aber wenn es Ihnen gefällt, können Sie Trevors Antwort unten sehen .
Antworten:
Der Vervollständigungsparameter in animateWithDuration verwendet einen Block, der einen booleschen Parameter verwendet. In Swift, wie in Obj C-Blöcken, müssen Sie die Parameter angeben, die ein Abschluss benötigt:
Der wichtige Teil hier ist die
(value: Bool) in
. Dies teilt dem Compiler mit, dass dieser Abschluss einen Bool mit der Bezeichnung 'value' verwendet und void zurückgibt.Wenn Sie als Referenz einen Abschluss schreiben möchten, der einen Bool zurückgibt, lautet die Syntax
quelle
$0
für das erste Argument nur die Variable innerhalb des Blocks verwendet wird. Der Compiler stellt fest, dass Ihr Block ein Argument akzeptiert.Der Abschluss ist korrekt, der Abschluss muss einen
Bool
Parameter akzeptieren :(Bool) -> ()
. Versuchenquelle
Ein Unterstrich neben dem
in
Schlüsselwort ignoriert die EingabeSwift 2
Swift 3, 4, 5
quelle
Es gibt meine Lösung oben basierend auf der oben akzeptierten Antwort. Es blendet eine Ansicht aus und verbirgt sie einmal fast unsichtbar.
Swift 2
Swift 3, 4, 5
quelle
Los geht's, das wird kompiliert
Swift 2
Swift 3, 4, 5
Der Grund, warum ich den Bool-Bereich zum Unterstrich gemacht habe, ist, dass Sie diesen Wert nicht verwenden. Wenn Sie ihn benötigen, können Sie das (_) durch (value: Bool) ersetzen.
quelle
Manchmal möchten Sie dies in eine Variable werfen, um sie je nach Situation auf unterschiedliche Weise zu animieren. Dafür brauchst du
Oder Sie könnten das ebenso ausführliche verwenden:
Aber auf jeden Fall müssen Sie das
Bool
irgendwo angeben .quelle
SWIFT 3.x + 4.x.
Ich möchte ein Update machen und die Dinge vereinfachen.
Das folgende Beispiel ist in jedem
view
Fall implementiert, in dem es sich langsam versteckt und wenn es vollständig transparent ist. entfernt es selbst vom Elternteilview
ok
Die Variable wird immertrue
mit Beendigung der Animation zurückgegeben.quelle