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?

È stato utile?

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.

https://developer.apple. com / library / mac / documentazione / General / Devpedia-CocoaApp-MOSX / Responder.html

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