Estoy trabajando en mi primera aplicación de iOS y me he encontrado con la primera pega para la que no he podido encontrar una buena respuesta.Objetivo C y iOS: ¿ejecuta un temporizador? NSTimer/Threads/NSDate/etc
El problema: tengo un UIGestureRecognizer
personalizado y lo tengo todo cableado correctamente, y puedo ejecutar el código para cada toque en el @selector
después del reconocimiento. Esto ha estado bien para la mayoría de las cosas, pero es un poco demasiado para otros.
Mi objetivo: hacer que un temporizador que se dispara en un intervalo especificado ejecute la lógica, y poder cancelar esto en el momento en que se cancelan los toques.
Por qué lo estoy preguntando aquí: Hay muchas posibilidades para las soluciones, pero ninguna se ha destacado como la mejor para implementar. Hasta ahora parece que
performSelector
(y algunas variaciones sobre este)NSThread
NSTimer
NSDate
- Operación colas
- Creo que he encontrado algunos otros también ...
De toda la investigación, alguna forma de hacer un hilo parece ser el camino a seguir, pero estoy en una pérdida en la que funcionaría mejor para esta situación.
Un ejemplo de una implementación: un NSPoint
se toma cada 0,10 segundos, y se toma la distancia entre el punto anterior y el actual. [Tomando la distancia entre cada punto estaba dando resultados muy desordenados].
El código relevante:
- (void)viewDidLoad {
CUIVerticalSwipeHold *vSwipe =
[[CUIVerticalSwipeHold alloc]
initWithTarget:self
action:@selector(touchHoldMove:)];
[self.view addGestureRecognizer:vSwipe];
[vSwipe requireGestureRecognizerToFail:doubleTap];
}
...
- (IBAction)touchHoldMove:(UIGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
}
if (sender.state == UIGestureRecognizerStateBegan) {
}
//other stuff to do goes here
}
Nota: Se considera buena práctica establecer el temporizador en cero después de invalidarlo: [el temporizador invalida]; theTimer = nil; – Groot