Domanda

Sto scrivendo una domanda in cui l'utente deve spostare alcune cose sullo schermo utilizzando le dita e rilasciarli. Per fare questo, sto usando la touchesBegan, touchesEnded ... funzione di ogni opinione che deve essere spostato.

Il problema è che a volte i punti di vista sono coperti da una vista visualizzata utilizzando la funzione [UIViewController presentModalViewController]. Non appena ciò accade, l'UIView che mi muovevo smette di ricevere gli eventi touch, da quando è stato coperto. Ma non c'è evento che mi dice che ha smesso di ricevere gli eventi, così posso ripristinare lo stato della vista mosso.

Il seguente è un esempio che illustra questo. Le funzioni sono parte di un UIView che viene visualizzato nella finestra principale. Si ascolta toccare eventi e quando ho trascinare il dito per una certa distanza, si presenta una vista modale che copre tutto. Nella Run Log, stampa quello che si ricevono eventi touch.

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

Ma quando ho testare l'applicazione e innescare la finestra di dialogo modale da visualizzare, il seguente è l'output nel registro Run.

  

[Sessione iniziata alle 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] Mostra modale

Qualche suggerimento su come reimpostare lo stato di un UIView quando i suoi eventi touch sono interrotti da una vista modale?

È stato utile?

Soluzione

Se si controlla quando viene visualizzata la vista modale, si può anche inviare una notifica al tempo stesso a raccontare il resto della tua app che dovrebbero ripristinare la visualizzazione spostato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top