Annulla UITouch Eventi Quando View Coperto Da modale UIViewController
-
22-09-2019 - |
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?
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?