Buscar..
Parámetros
Parámetro | Detalles |
---|---|
interval | El tiempo, en segundos, para esperar antes de encender el temporizador; o, en temporizadores de repetición, el tiempo entre disparos. |
target | El objeto para llamar al selector en |
selector | En Swift, un objeto Selector que especifica el método para llamar al target |
repeats | Si es false , dispara el temporizador solo una vez. Si es true , dispara el temporizador cada interval segundos. |
Observaciones
Un NSTimer
permite enviar un mensaje a un destino una vez transcurrido un período de tiempo específico.
Creando un temporizador
Esto creará un temporizador para llamar al método doSomething
en self
en 5 segundos.
Rápido
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)
C objetivo
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];
La configuración se repite en false/NO
indica que queremos que el temporizador se active solo una vez. Si configuramos esto en true/YES
, se dispararía cada cinco segundos hasta que se invalide manualmente.
Manualmente disparando un temporizador
Rápido
timer.fire()
C objetivo
[timer fire];
Llamar al método de fire
hace que un NSTimer realice la tarea que normalmente habría realizado en un horario.
En un temporizador que no se repite , esto invalidará automáticamente el temporizador. Es decir, activar el fire
antes de que fire
el intervalo de tiempo dará lugar a una sola invocación.
En un temporizador de repetición , esto simplemente invocará la acción sin interrumpir el horario habitual.
Invalidando un temporizador
Rápido
timer.invalidate()
C objetivo
[timer invalidate];
Esto detendrá el temporizador de disparar. Debe llamarse desde el hilo en el que se creó el temporizador, consulte las notas de Apple :
Debe enviar este mensaje desde el hilo en el que se instaló el temporizador. Si envía este mensaje desde otro hilo, es posible que la fuente de entrada asociada con el temporizador no se elimine de su ciclo de ejecución, lo que podría impedir que el hilo salga correctamente.
Notas: Una vez que se ha invalidado el temporizador, es imposible disparar el mismo temporizador invalidado. En su lugar, debe inicializar nuevamente el temporizador invalidado y activar el método de disparo.
Opciones de frecuencia del temporizador
Evento de temporizador repetido
Rápido
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()
}
}
Debe ser invalidado manualmente si lo desea.
Rápido
Evento temporizador retardado no repetido
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)
El temporizador se activará una vez, 3 segundos después del tiempo de ejecución. Será invalidado automáticamente, una vez disparado.
Paso de datos utilizando el temporizador
Si desea pasar algunos datos con el disparador del temporizador, puede hacerlo con el parámetro userInfo
.
Este es el enfoque simple que brinda una breve idea de cómo puede pasar los datos al método activado desde el temporizador.
[ Swift 3 ]
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)
[ Objetivo - C ]
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(iGotCall:)
userInfo:@"i am iOS guy" repeats:YES];
La línea de código anterior pasa ["Name": "i am iOS guy"]
a la userInfo
del userInfo
. Así que ahora, cuando se recibe la llamada de iGotCall
, puede obtener el valor pasado como se muestra a continuación en el fragmento de código.
[ Swift 3 ]
func iGotCall(sender: Timer) {
print((sender.userInfo)!)
}
[ Objetivo - C ]
- (void)iGotCall:(NSTimer*)theTimer {
NSLog (@"%@", (NSString*)[theTimer userInfo]);
}