Weiterleitung Berührungen zu zugrunde liegenden Ansicht mit GestureRecogniser


0

Ich habe eine Overlay-Ansicht, die viele Geschwister Ansichten (Schaltflächen) deckt.

Ich versuche, berührt zu einer Geschwister Ansicht zu übermitteln, die hier unter der Überlagerungsansicht mit dieser Antwort ist: https://stackoverflow.com/a/4847478

Dies liegt daran, dass meine Überlagerungsansicht GestureRecognisers hat.

Ich möchte, dass die Überlagerungsansicht Gesten erkennen kann (einschließlich Gesten über Schaltflächen) UND alle Berührungsereignisse an darunterliegende Geschwisteransichten weitergibt.

Ich habe festgestellt, dass die Ereignisse weitergeleitet werden, aber die Schaltfläche Klicks werden immer noch nicht ausgelöst, möglicherweise aufgrund der Tatsache, dass die Berührungen von der Overlay-Ansicht gehören.

Ich glaube nicht, dass es möglich ist, den Besitz der Berührung zu ändern.

Wie kann ich die Schaltfläche klicken, um zu registrieren, da die Ereignisse tatsächlich weitergeleitet werden?

  0

Wo ist Ihre Schaltfläche hinzugefügt? auf Overlay oder unter Overlay? 08 mär. 172017-03-08 09:57:26

  0

@CodeChanger unter dem Overlay; Das (transparente) Overlay verdeckt die Schaltflächen. 08 mär. 172017-03-08 09:59:52

  0

Ist Ihr Overlay transparent? Es kann sein, dass Sie keine Überlagerung wollen, aber tatsächlich nur die Gestenerkennung in die Superansicht Ihrer Schaltflächen einfügen möchten. Sie können dann ihren Delegaten implementieren, um anderen Erkennern zu erlauben, gleichzeitig damit zu erkennen. Wenn das für Sie wie eine Lösung klingt, lassen Sie es mich wissen und ich kann Ihnen eine detailliertere Lösung anbieten? 08 mär. 172017-03-08 11:44:40

  0

@GeorgeGreen Ja, ich brauche die Overlay-Ansicht nicht. Ich brauche alle Gesten, um auf dem SuperView erkannt zu werden und die Berührungen an die Tasten weiterzugeben, auch wenn eine Geste erkannt wurde. Ich habe IBActions mit den TouchUpInside-Ereignissen der Schaltflächen verbunden. Gerade jetzt, obwohl die Tasten die TouchesBegan, touchesMoved, etc aufrufen, wird das TouchUpInside-Ereignis nicht ausgelöst. Ich möchte keine benutzerdefinierte Erkennung von TouchUpInside implementieren. 08 mär. 172017-03-08 22:28:44

  0

@ignoramus Interessant, wenn Sie das Overlay entfernt und die Gestenerkennung in die Superansicht verschoben haben, sollte es mit den anderen Steuerelementen Ball spielen. Könnten Sie den Controllercode veröffentlichen, der das Problem verursacht, und wir sollten in der Lage sein, dies zu beheben? 08 mär. 172017-03-08 22:34:21

  0

@GeorgeGreen Ja, es funktioniert. Vielen Dank! Könnten Sie Ihren Kommentar als Antwort posten, damit ich ihn akzeptieren kann? 09 mär. 172017-03-09 00:18:18

0

Für Ihr Problem müssen Sie Ihren Responder an die nächste Stufe übergeben, wenn sein Alpha-Wert 0 ist und basierend darauf Ihre Responder-Nachricht an die nächste Ansicht weiterleiten und Sie können Ihre Berührung oder klicken Sie auf Schaltfläche. NO für Pass-Nachricht zum nächsten Responder

Aufschalten pointInside: Methode in Ihrem Container Ansicht und prüfen, ob berühren Ansicht alpha Rückkehr als übergeben ist.

wie folgt aus:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    for (UIView *view in self.subviews) { 
     if (!view.hidden && view.alpha > 0 && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event]) 
      return YES; 
    } 
    return NO; 
} 

hoffe, dies wird Ihnen Responder-Kette Weitere Einzelheiten zu verstehen, hilft können Sie diese akzeptierte Antwort überprüfen: How can I click a button behind a transparent UIView?

  0

Leider funktioniert das nicht, da ich die Geste in der Überlagerungsansicht erkennen muss, unabhängig davon, ob die Berührung auf einer Schaltfläche war oder nicht. 08 mär. 172017-03-08 10:20:28

  0

Haben Sie oben in Ihrem Code versucht? 08 mär. 172017-03-08 10:22:48

  0

Sorry, ich habe es falsch gelesen, ich werde es jetzt versuchen. 08 mär. 172017-03-08 10:26:19

  0

Aber nach Ihrer Frage brauchen Sie Button Event nicht Gestenerkennungsereignis auf Knopf bin ich richtig? 08 mär. 172017-03-08 10:26:33

  0

Ok Ich habe es gerade ausprobiert, und es funktioniert nicht.Ich brauche Gestenerkennungsereignis in ALLEN der Überlagerungsansicht, einschließlich über die Schaltflächen. Ich habe die Frage bearbeitet, um dies zu klären. 08 mär. 172017-03-08 10:37:45

  0

Ok, eine weitere Sache, die du in diesem Fall tun kannst, erkennst du den Knopf in der Gestenerkennung, aber dafür kannst du etwas Code posten, damit wir uns ein Bild davon machen können, wie du Knopf und Geste in deiner Sicht verwendest? 08 mär. 172017-03-08 10:51:08