Recherche…
Paramètres
Paramètre | Détails |
---|---|
interval | Le temps, en secondes, à attendre avant de déclencher la minuterie; ou, en répétant les minuteries, le temps entre les tirs. |
target | L'objet sur lequel appeler le selector |
selector | Dans Swift, un objet Selector spécifiant la méthode à utiliser sur la target |
repeats | Si la valeur est false , déclenchez la minuterie une seule fois. Si true , le feu de la minuterie chaque interval secondes. |
Remarques
Un NSTimer
vous permet d'envoyer un message à une cible après une période de temps spécifiée.
Créer une minuterie
Cela créera une minuterie pour appeler la méthode doSomething
sur lui- self
en 5 secondes.
Rapide
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)
Objectif c
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];
Régler les répétitions sur false/NO
indique que nous voulons que le minuteur ne se déclenche qu'une seule fois. Si nous définissons cette valeur sur true/YES
, elle se déclenche toutes les cinq secondes jusqu'à ce qu'elle soit invalidée manuellement.
Lancer manuellement une minuterie
Rapide
timer.fire()
Objectif c
[timer fire];
L'appel de la méthode d' fire
provoque l'exécution par NSTimer de la tâche qu'il aurait normalement effectuée sur une planification.
Dans un minuteur non répétitif , cela invalidera automatiquement le minuteur. En d’autres termes, le fait d’appeler le fire
avant l’intervalle de temps ne produira qu’une seule invocation.
Dans un compte à rebours , cela invoquera simplement l'action sans interrompre le programme habituel.
Invalider une minuterie
Rapide
timer.invalidate()
Objectif c
[timer invalidate];
Cela empêchera la minuterie de se déclencher. Doit être appelé à partir du thread dans lequel le minuteur a été créé, voir les notes d'Apple :
Vous devez envoyer ce message à partir du thread sur lequel la minuterie a été installée. Si vous envoyez ce message à partir d'un autre thread, la source d'entrée associée à la minuterie peut ne pas être supprimée de sa boucle d'exécution, ce qui peut empêcher la sortie du thread correctement.
Notes: Une fois le minuteur désactivé, il est impossible de déclencher le même minuteur invalidé. Au lieu de cela, vous devez initialiser à nouveau le minuteur invalidé et déclencher la méthode de tir.
Options de fréquence de minuterie
Minuterie répétée
Rapide
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()
}
}
Doit être invalidé manuellement si vous le souhaitez.
Rapide
Événement retardé non répété
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)
La minuterie sera déclenchée une fois, 3 secondes après le moment de l'exécution. Sera invalidé automatiquement, une fois tiré.
Transmission de données à l'aide de la minuterie
Si vous souhaitez transmettre des données avec la temporisation, vous pouvez le faire avec le paramètre userInfo
.
Voici l'approche simple qui donne une brève idée de la manière dont vous pouvez transmettre les données à la méthode déclenchée à partir du minuteur.
[ Swift 3 ]
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)
[ Objectif - C ]
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(iGotCall:)
userInfo:@"i am iOS guy" repeats:YES];
La ligne de code ci-dessus qui passe ["Name": "i am iOS guy"]
dans le userInfo
. Donc, maintenant, lorsque l'appel iGotCall
reçu, vous pouvez obtenir la valeur transmise comme ci-dessous.
[ Swift 3 ]
func iGotCall(sender: Timer) {
print((sender.userInfo)!)
}
[ Objectif - C ]
- (void)iGotCall:(NSTimer*)theTimer {
NSLog (@"%@", (NSString*)[theTimer userInfo]);
}