Ricezione di eventi touch su più di un UIView simultaneamente
-
14-10-2019 - |
Domanda
Ho un mazzo di UIViews
impilati uno sopra l'altro (non annidata). Li voglio tutti a reagire al tocco, ma sembra che la vista più in alto oscura la vista sotto di esso, impedendo loro di ricevere gli eventi di tocco.
In un primo momento ho pensato di cattura tutti gli eventi di tocco con la vista più in alto, e quindi chiamare manualmente
hitTest
, o pointInside
metodi su tutti i punti di vista sottostanti, ma ho scoperto che entrambi i metodi sono in qualche modo privato (potrebbe essere?) e non si può accedere.
Tutte le idee come a tirarlo fuori?
Soluzione
È possibile controllare se il tocco è per la visualizzazione più in alto. Se non lo fa si può chiamare lo stesso metodo del vostro superview. Qualcosa di simile [self.superview sameMethod: sameParameter].
La vista più in alto ha un metodo
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
All'interno quel metodo si sta facendo la vostra logica giusto? All'interno del metodo non si può verificare se il tocco ricevuto è a vostra più in alto vista con
UITouch *touch = [touches anyObject];
[touch locationInView:self];
E se non lo si passa alla stesso metodo del Superview usando
[self.superview touchesEnded:touches withEvent:event];
Altri suggerimenti
tocchi sono inviati a un unico punto di vista. Questa tesi può quindi opzionalmente passare la catena responder. Se si desidera un tocco maniglia per una raccolta di punti di vista si dovrebbe avere inoltrarli quegli eventi fino al prossimo risponditore ed avere un genitore comune di tutti loro (o il loro controller di vista dal momento che il controllore è anche parte della catena responder) gestire quelli tocchi.