Mam problem z uruchomieniem bloków w Swift. Oto przykład, który zadziałał (bez bloku uzupełniania):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
lub alternatywnie bez zamknięcia końcowego:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
ale kiedy spróbuję dodać blok uzupełniania, po prostu nie zadziała:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
Autouzupełnianie daje mi, completion: ((Bool) -> Void)?
ale nie jestem pewien, jak to działa. Próbowano również z końcowym zamknięciem, ale wystąpił ten sam błąd:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Aktualizacja dla 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#>
})
Nie używam końcowego zamknięcia dla bloku uzupełniania, ponieważ wydaje mi się, że brakuje mu jasności, ale jeśli ci się spodoba, możesz zobaczyć odpowiedź Trevora poniżej .
Odpowiedzi:
parametr zakończenia w animateWithDuration przyjmuje blok, który przyjmuje jeden parametr boolowski. Szybko, podobnie jak w blokach Obj C, musisz określić parametry, które przyjmuje zamknięcie:
Ważną częścią jest tutaj
(value: Bool) in
. To mówi kompilatorowi, że to zamknięcie przyjmuje wartość Bool oznaczoną jako „wartość” i zwraca wartość void.Dla porównania, jeśli chcesz napisać zamknięcie, które zwróciło wartość logiczną, składnia byłaby taka
źródło
$0
jako pierwszego argumentu, po prostu używając zmiennej wewnątrz bloku, kompilator wykrywa, że twój blok przyjmuje argument.Zakończenie jest poprawna, zamknięcie musi zaakceptować
Bool
parametr:(Bool) -> ()
. Próbowaćźródło
Samo podkreślenie obok
in
słowa kluczowego zignoruje wprowadzone daneSzybki 2
Swift 3, 4, 5
źródło
Jest moje rozwiązanie powyżej oparte na zaakceptowanej odpowiedzi powyżej. Znika widok i ukrywa go kiedyś prawie niewidoczny.
Szybki 2
Swift 3, 4, 5
źródło
Proszę bardzo, to się skompiluje
Szybki 2
Swift 3, 4, 5
Powodem, dla którego uczyniłem obszar Bool podkreśleniem, jest to, że nie używasz tej wartości, jeśli jej potrzebujesz, możesz zamienić (_) na (wartość: Bool)
źródło
Czasami chcesz wrzucić to do zmiennej, aby animować ją na różne sposoby w zależności od sytuacji. Do tego potrzebujesz
Lub możesz użyć równie rozwlekłych:
Ale w każdym razie musisz
Bool
gdzieś wskazać .źródło
SWIFT 3.x + 4.x
Chciałbym dokonać aktualizacji i uprościć wszystko.
Przykład poniżej jest zaimplementowany w każdym,
view
gdy ukrywa się powoli i kiedy jest całkowicie przezroczysty; usuwa to samo z rodzicówview
ok
zmienna będzie zawsze zwracanatrue
po zakończeniu animacji.źródło