Szukaj…
Parametry
Parametr | Detale |
---|---|
interval | Czas w sekundach oczekiwania przed odpaleniem stopera; lub, powtarzając liczniki czasu, czas między odpaleniami. |
target | Obiekt do wywołania selector |
selector | W Swift: obiekt Selector określający metodę wywoływania target |
repeats | Jeśli false , uruchom timer tylko raz. Jeśli true , pożaru timer co interval sekundy. |
Uwagi
NSTimer
pozwala wysłać wiadomość do celu po upływie określonego czasu.
Tworzenie timera
Spowoduje to utworzenie timera, który doSomething
metodę doSomething
na self
za 5 sekund.
Szybki
let timer = NSTimer.scheduledTimerWithTimeInterval(5,
target: self,
selector: Selector(doSomething()),
userInfo: nil,
repeats: false)
Szybki 3
let timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(doSomething()),
userInfo: nil,
repeats: true)
Cel C
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];
Ustawienie powtórzeń na false/NO
oznacza, że chcemy, aby timer zadziałał tylko raz. Jeśli ustawimy to na true/YES
, uruchomi się co pięć sekund, aż do ręcznego unieważnienia.
Ręczne odpalanie timera
Szybki
timer.fire()
Cel C
[timer fire];
Wywołanie metody fire
powoduje, że NSTimer wykonuje zadanie, które zwykle wykonałby zgodnie z harmonogramem.
W przypadku niepowtarzającego się timera spowoduje to automatyczne unieważnienie timera. Oznacza to, że wywołanie fire
przed upływem przedziału czasu spowoduje tylko jedno wywołanie.
W przypadku powtarzającego się timera spowoduje to po prostu wywołanie akcji bez przerywania zwykłego harmonogramu.
Unieważnianie timera
Szybki
timer.invalidate()
Cel C
[timer invalidate];
To zatrzyma uruchamianie timera. Musi zostać wywołany z wątku, w którym utworzono stoper, zobacz uwagi Apple :
Musisz wysłać tę wiadomość z wątku, w którym zegar został zainstalowany. Jeśli wyślesz ten komunikat z innego wątku, źródło wejściowe powiązane z zegarem może nie zostać usunięte z pętli uruchamiania, co może uniemożliwić prawidłowe wyjście z wątku.
Uwagi: Po unieważnieniu timera nie można uruchomić tego samego unieważnionego timera, zamiast tego należy ponownie zainicjować unieważniony timer i uruchomić metodę strzału.
Opcje częstotliwości timera
Powtarzane zdarzenie timera
Szybki
class ViewController: UIViewController {
var timer = NSTimer()
override func viewDidLoad() {
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
}
func timerMethod() {
print("Timer method called")
}
func endTimer() {
timer.invalidate()
}
}
Szybki 3
class ViewController: UIViewController {
var timer = Timer()
override func viewDidLoad() {
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: true)
}
func timerMethod() {
print("Timer method called")
}
func endTimer() {
timer.invalidate()
}
}
W razie potrzeby należy ręcznie unieważnić.
Szybki
Niepowtarzane opóźnione zdarzenie timera
NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: false)
Szybki 3
Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: false)
Timer zostanie uruchomiony raz, 3 sekundy po czasie wykonania. Po uruchomieniu zostanie automatycznie unieważniony.
Przekazywanie danych za pomocą Timera
Jeśli chcesz przekazać niektóre dane za pomocą wyzwalacza czasowego, możesz to zrobić za pomocą parametru userInfo
.
Oto proste podejście, które daje krótkie wyobrażenie o tym, jak przekazać dane do wyzwalanej metody z Timera.
[ Swift 3 ]
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)
[ Cel - C ]
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(iGotCall:)
userInfo:@"i am iOS guy" repeats:YES];
Powyższy wiersz kodu przekazuje ["Name": "i am iOS guy"]
do userInfo
. Więc teraz, gdy iGotCall
połączenie, możesz otrzymać przekazaną wartość jak poniżej fragmentu kodu.
[ Swift 3 ]
func iGotCall(sender: Timer) {
print((sender.userInfo)!)
}
[ Cel - C ]
- (void)iGotCall:(NSTimer*)theTimer {
NSLog (@"%@", (NSString*)[theTimer userInfo]);
}