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]);
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow