por pantalla inicio home flotante desactivar control como boton assistive iphone cocoa-touch uibutton multi-touch

pantalla - como desactivar el boton home del iphone



¿Cómo hacer que un UIButton se dispare continuamente durante una situación de presionar y mantener? (4)

¿Sabes cómo Mario sigue corriendo hacia la derecha cuando mantienes presionado el botón derecho en el D-Pad? De la misma manera, quiero que mi UIButton dispare continuamente su acción durante el tiempo que se mantenga presionada. ¿Es esto posible para un UIButton? Si no es así, ¿es posible hacer esto con un UIImageView al anular un método de manejo táctil de cierta manera? En realidad, antes de intentar hacer esto con UIButton tuve algunas UIImageViews (dispuestas para funcionar como un D-Pad) que fueron revisadas por métodos de manejo táctil, pero las cosas comenzaron a complicarse, así que pensé que esto podría hacerse más fácil con UIButton y por lo tanto conmutado Cualquier persona que sepa cómo obtener un reconocimiento de un contacto continuo, estacionario (sin movimiento), por favor, comparta.


No use un botón, use multi-touch y NSTimer:

Cree un objeto NSTimer con vista local dentro de su interfaz, luego utilícelo para iniciar / cancelar el temporizador

-(void)movePlayer:(id)sender { <Code to move player> } -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(movePlayer:) userInfo:nil repeats:YES]; } -(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { if (timer != nil) [timer invalidate]; timer = nil; } -(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { if (timer != nil) { [timer invalidate]; timer = nil; } }

De esta manera, puede repetir el evento en un intervalo predefinido, y no tener que depender de un botón, y obtener el comportamiento de repetición que está buscando. Fíjate en el disparador presionado por el movimiento: si mueven el dedo, esto cancela el temporizador y el jugador deja de moverse.


Para mí los siguientes trabajos:

  1. Crea un botón.
  2. Cree 2 métodos (deje de tocar y comience a tocar) en el controlador de vista o en una subclase.
  3. Añadir 3 eventos de control. Toque hacia adentro y toque Arrastrar Salir para que ambos vayan a dejar de tocar el método y Toque hacia abajo para comenzar a tocar el método.
  4. Cuando comience a tocar invocaciones al método, deberíamos iniciar un NSTimer con un intervalo de aproximadamente 0,2 (depende de usted qué tan rápido le gustaría ser invocado), repetir verdadero y como selector el método que desea invocar (teniendo las cosas reales que desea para ejecutar cuando el usuario pulsa el botón).
  5. Cuando deje de tocar el método, debemos invalidar el temporizador ( .invalidate() ) y asignar el temporizador como nulo.

¡Eso es todo!


También puede hacer algo similar a lo que se muestra en la respuesta anterior y seguir utilizando un UIButton.

Simplemente haga que el temporizador comience en el "Touch Down" y que el temporizador se detenga en "Touch Up Inside" o "Touch Up Outside".

Personalmente, me gusta usar UIButtons porque ofrecen algunas mejoras visuales integradas que no tiene que codificar por su cuenta.


Y ahora para algo completamente diferente:
ReactiveCocoa 6 .

self.button.reactive .controlEvents([.touchDown]) .observeValues { button in SignalProducer.timer(interval: .milliseconds(500), on: QueueScheduler.main) .take(until: button.reactive.controlEvents([.touchDragOutside, .touchDragExit, .touchUpInside, .touchUpOutside, .touchCancel]).map { _ in return }) .prefix(value: Date()) .startWithValues { date in NSLog("/(date)") } }