Question

Je suis en train d'écrire une application où l'utilisateur doit déplacer des choses sur l'écran avec ses doigts et de les déposer. Pour ce faire, je me sers du touchesBegan, touchesEnded ... fonction de chaque point de vue qui doit être déplacé.

Le problème est que parfois les points de vue sont couverts par une vue affichée en utilisant la fonction [UIViewController presentModalViewController]. Dès que cela arrive, le UIView que je bougeais cesse de recevoir les événements tactiles, car il a été couvert. Mais il n'y a aucun événement me dire qu'il a cessé de recevoir les événements, donc je peux réinitialiser l'état de la vue déplacé.

Ce qui suit est un exemple qui illustre cela. Les fonctions font partie d'un UIView qui est affiché dans la fenêtre principale. Il écoute de toucher des événements et quand je fais glisser le doigt sur une certaine distance, il présente une vue modale qui couvre tout. Dans le journal Run, il imprime les événements tactiles sont reçus.

- (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");
}

Mais quand je teste l'application et déclencher le dialogue modale à afficher, ce qui suit est la sortie du Run Log.

  

[session a commencé à 2010-03-27   16:17:14 -0700.] 2010-03-27   16: 17: 18,831   modelTouchCancel [2594: 207]   touchesBegan 27/03/2010 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] Voir modal

Toutes les suggestions sur la façon de réinitialiser l'état d'un UIView lorsque ses événements tactiles sont interrompus par une vue modal?

Était-ce utile?

La solution

Si vous contrôlez lorsque la vue modale est affichée, vous pouvez également envoyer une notification en même temps de dire au reste de votre application qu'ils devraient revenir à la vue proposée?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top