Pregunta

Estoy escribiendo una aplicación donde el usuario tiene que mover algunas cosas en la pantalla con los dedos y soltarlos. Para hacer esto, estoy usando la función touchesBegan, touchesEnded ... de cada vista que se tiene que mover.

El problema es que a veces los puntos de vista están cubiertos por una vista que se muestra mediante la función [UIViewController presentModalViewController]. Tan pronto como esto sucede, el UIView que me estaba moviendo deja de recibir los eventos de toque, ya que fue cubierto. Pero no hay un evento que me dice que dejó de recibir los eventos, por lo que puede restablecer el estado de la vista movido.

El siguiente es un ejemplo que demuestra esto. Las funciones son parte de un UIView que se muestra en la ventana principal. Se escucha tocar eventos y cuando arrastrar el dedo para una cierta distancia, se presenta una vista modal que lo cubre todo. En el registro de ejecución, se imprime lo que se reciben eventos de toque.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesBegan");

  touchStart=[[touches anyObject] locationInView:self];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  CGPoint touchAt=[[touches anyObject] locationInView:self];
  float xx=(touchAt.x-touchStart.x)*(touchAt.x-touchStart.x);
  float yy=(touchAt.y-touchStart.y)*(touchAt.y-touchStart.y);
  float rr=xx+yy;

  NSLog(@"touchesMoved %f",rr);
  if(rr > 100) {
    NSLog(@"Show modal");
    [viewController presentModalViewController:[UIViewController new] animated:NO];
  }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesEnded");
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesCancelled");
}

Pero cuando pruebo la aplicación y activar el diálogo modal que se muestra, la siguiente es la salida en el registro de ejecución.

  

[Sesión comenzó a las 2010-03-27   16:17:14 -0700.] 2010-03-27   16: 17: 18.831   modelTouchCancel [2594: 207]   touchesBegan 2010-03-27 16: 17: 19.485   modelTouchCancel [2594: 207]   touchesMoved 2.000000 2010-03-27   16: 17: 19.504   modelTouchCancel [2594: 207]   touchesMoved 4.000000 2010-03-27   16: 17: 19.523   modelTouchCancel [2594: 207]   touchesMoved 16.000000 2010-03-27   16: 17: 19.538   modelTouchCancel [2594: 207]   touchesMoved 26.000000 2010-03-27   16: 17: 19.596   modelTouchCancel [2594: 207]   touchesMoved 68.000000 2010-03-27   16: 17: 19.624   modelTouchCancel [2594: 207]   touchesMoved 85.000000 2010-03-27   16: 17: 19.640   modelTouchCancel [2594: 207]   touchesMoved 125.000000 2010-03-27   16: 17: 19.641   modelTouchCancel [2594: 207] Mostrar modal

¿Alguna sugerencia sobre cómo restablecer el estado de un UIView cuando sus eventos táctiles son interrumpidos por una vista modal?

¿Fue útil?

Solución

Si está controlando cuando se visualiza la vista modal, puede también enviar una notificación al mismo tiempo para contar el resto de su aplicación que deberían restablecer la vista movido?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top