Czy istnieje łatwy sposób opóźnienia wywołania metody o 1 sekundę?
Mam taki, UIImageView
który reaguje na zdarzenie dotykowe. Po wykryciu dotyku w aplikacji pojawiają się animacje. Po sekundzie chcę wywołać inną metodę. W tym przypadku nie mogę użyć animationDidStop
selektora.
ios
objective-c
iphone
cocoa-touch
uikit
Dzięki
źródło
źródło
Odpowiedzi:
Odnośnik do dokumentu
źródło
Możesz także użyć bloku
W większości przypadków będziesz chciał użyć dispatch_get_main_queue, chociaż jeśli nie ma interfejsu użytkownika w metodzie, możesz użyć globalnej kolejki .
Edytować:
Wersja Swift 3:
Równie dobrze
DispatchQueue.global().asyncAfter(...
może to być również dobra opcja.źródło
dispatch_after
i naciśnij Enterdispatch_after
, jest to naprawdę bardzo prosty sposób, a ponadto możesz przekazać właściwości do wywoływanej metody, co jest świetne.Najlepszym sposobem jest:
możesz również przekazać nil jako parametr withObject.
przykład:
źródło
Odpowiedzi jest już wiele i wszystkie są poprawne. Jeśli chcesz użyć tego
dispatch_after
, powinieneś poszukać fragmentu, który znajduje sięCode Snippet Library
w prawym dolnym rogu (gdzie możesz wybraćUI
elementy).Wystarczy więc wywołać ten fragment kodu, pisząc wiadomość w kodzie:
źródło
Możesz użyć selektora wykonania po wywołaniu metody opóźnienia 0,1 sekundy dla tego następującego kodu, aby to zrobić.
źródło
Możesz także:
W tym przypadku musisz sfałszować pewne zmiany w niektórych widokach, aby animacja działała. Rzeczywiście jest to hacky, ale uwielbiam rzeczy oparte na blokach. Lub podsumuj odpowiedź @mcfedr poniżej.
źródło
Możesz to zrobić
źródło
Swift 2.x
Swift 3.x - & - Swift 4
lub przejść
escaping closure
źródło
Ze sprawdzonego rozwiązania jest rozwiązanie Swift 3:
Jest metoda
źródło
Użyj w Swift 3
źródło
UWAGA: spowoduje to wstrzymanie całego wątku, a nie tylko jednej metody.
Wykonaj wywołanie uśpienia / oczekiwania / zatrzymania przez 1000 ms tuż przed wywołaniem metody?
Edytuj: Powyższa odpowiedź dotyczy pytania ogólnego „Jak mogę opóźnić wywołanie metody o 1 sekundę?”, Które było pytaniem zadawanym w momencie udzielenia odpowiedzi (w rzeczywistości odpowiedź została udzielona w ciągu 7 minut od pierwotnego pytania: - )). Nie podano wówczas żadnych informacji o języku, więc uprzejmie przestań narzekać na właściwy sposób korzystania ze snu i XCode oraz brak zajęć ...
źródło