Ricerca…


Parametri

Parametro Dettagli
interval Il tempo, in secondi, di aspettare prima di sparare il timer; o, nel ripetere i timer, il tempo tra un licenziamento e l'altro.
target L'oggetto su cui chiamare il selector
selector In Swift, un oggetto Selector che specifica il metodo da chiamare sulla target
repeats Se false , attiva il timer una sola volta. Se è true , spara il timer ogni secondo d' interval .

Osservazioni

Un NSTimer ti consente di inviare un messaggio a un target dopo che è trascorso un determinato periodo di tempo.

Creazione di un timer

Questo creerà un timer per chiamare il metodo doSomething su self in 5 secondi.

veloce

let timer = NSTimer.scheduledTimerWithTimeInterval(5,
                               target: self,
                             selector: Selector(doSomething()),
                             userInfo: nil,
                              repeats: false)

Swift 3

 let timer = Timer.scheduledTimer(timeInterval: 1,
                                        target: self, 
                                      selector: #selector(doSomething()), 
                                      userInfo: nil, 
                                       repeats: true)

Objective-C

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];

Impostando le ripetizioni su false/NO indica che vogliamo che il timer si attivi solo una volta. Se lo impostiamo su true/YES , verrebbe generato ogni cinque secondi fino a quando non viene invalidato manualmente.

Spegnere manualmente un timer

veloce

timer.fire()

Objective-C

[timer fire];

La chiamata al metodo di fire fa sì che un NSTimer esegua l'attività che normalmente avrebbe eseguito su una pianificazione.

In un timer non ripetuto , ciò invalida automaticamente il timer. Cioè, chiamare il fire prima che l'intervallo di tempo sia scaduto comporterà solo una chiamata.

In un timer ripetuto , questo semplicemente invocherà l'azione senza interrompere il solito programma.

Invalidare un timer

veloce

timer.invalidate()

Objective-C

[timer invalidate];

Questo fermerà il timer dal licenziamento. Deve essere chiamato dal thread in cui è stato creato il timer, vedere le note di Apple :

È necessario inviare questo messaggio dal thread su cui è stato installato il timer. Se si invia questo messaggio da un altro thread, la sorgente di input associata al timer non può essere rimossa dal suo ciclo di esecuzione, il che potrebbe impedire l'uscita corretta del thread.

Note: Una volta che il timer è stato invalidato, è impossibile attivare lo stesso timer invalidato. Invece, è necessario inizializzare nuovamente il timer invalidato e attivare il metodo di attivazione.

Opzioni di frequenza del timer

Evento timer ripetuto

veloce

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()
    }
}

Swift 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()
        }
    }

Deve essere invalidato manualmente se lo si desidera.

veloce

Evento timer ritardato non ripetuto

NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: false)

Swift 3

 Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: false)

Il timer verrà attivato una volta, 3 secondi dopo l'esecuzione. Sarà invalidato automaticamente, una volta sparato.

Passaggio di dati tramite Timer

Se si desidera passare alcuni dati con il trigger del timer, è possibile farlo con il parametro userInfo .

Ecco l'approccio semplice che fornisce una breve idea di come è possibile passare i dati al metodo attivato dal timer.

[ Swift 3 ]

Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)

[ Obiettivo - C ]

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:self
                                                    selector:@selector(iGotCall:)
                                                    userInfo:@"i am iOS guy" repeats:YES];

La precedente riga di codice che passa ["Name": "i am iOS guy"] in userInfo . Così ora, quando iGotCall riceve la chiamata, puoi ottenere il valore passato sotto lo snippet di codice.

[ Swift 3 ]

func iGotCall(sender: Timer) {
        print((sender.userInfo)!)
    }

[ Obiettivo - C ]

- (void)iGotCall:(NSTimer*)theTimer {
    NSLog (@"%@", (NSString*)[theTimer userInfo]);
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow