2011-01-03 5 views
3

Ich habe eine Reihe von UIViews übereinander gestapelt (nicht verschachtelt). Ich möchte, dass alle auf Berührung reagieren, aber es scheint, dass die oberste Ansicht die darunter liegenden Ansichten verdeckt, so dass sie keine Berührungsereignisse empfangen können.Empfangen von Berührungsereignissen auf mehr als einer UIView gleichzeitig

Zuerst dachte ich, ich würde alle Touch-Ereignisse fängt mit der obersten Ansicht, und rufen Sie dann manuell
hitTest oder pointInside Methoden auf allen zugrunde liegenden Ansichten, aber ich fand heraus, dass beide Methoden irgendwie privat sind (könnte es sein?) und kann nicht zugegriffen werden.

Irgendwelche Ideen, wie man es abzieht?

Antwort

3

Sie können überprüfen, ob die Berührung für Ihre oberste Ansicht ist. Wenn es nicht möglich ist, können Sie die gleiche Methode Ihrer Superview aufrufen. Etwas wie [self.superview sameMethod: sameParameter].

Ihre oberste Ansicht hat eine Methode

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

Innerhalb dieser Methode Sie Ihre Logik richtig machen? Innerhalb der Methode können Sie nicht überprüfen, ob die Note zu Ihrer obersten Ansicht mit

UITouch *touch = [touches anyObject];
[touch locationInView:self];

Und wenn es sie empfangen ist Ihnen nicht passieren, um die gleiche Methode des superview mit

[self.superview touchesEnded:touches withEvent:event]; 
+0

Tippfehler: "superview" => "Superview" – Ralphleon

+0

Danke. Das wurde behoben. –

3

Touches werden an eine einzelne Ansicht gesendet. Diese Ansicht kann dann optional die Responder-Kette weiterleiten. Wenn Sie mit Berührungen zu einer Sammlung von Ansichten umgehen möchten, sollten Sie diese Ereignisse an den nächsten Responder weiterleiten lassen und alle (oder deren View-Controller, da der Controller ebenfalls Teil der Responder-Kette ist) gemeinsam behandeln lassen berührt.

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