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