2014-07-21 4 views
6

Ich schreibe eine benutzerdefinierte Tastaturerweiterung für iOS 8 in Swift, und ich habe Probleme, ein Swype-artiges Scribble-Overlay zu implementieren. Im Moment verfügt meine Tastatur über eine Basis UIView (die view Eigenschaft meiner UIInputViewController), die eine Anzahl von UIButtons entsprechenden Tasten auf der Tastatur hat. Jeder dieser Tasten reagiert auf touchUpInside Ereignisse und hat UISwipeGestureRecognizers, die sekundäre Zeichen eingeben, wenn Sie nach oben oder unten wischen. Ich habe außer Kraft gesetzt, um meine Scribble-Overlay-Ansicht als Unteransicht hinzuzufügen, und touchesEnded:withEvent:, um meine Scribble-Overlay-Ansicht in meiner UIInputViewController zu entfernen.Wie unterscheide ich Berührungsereignisse bedingt ab?

Wenn ich derzeit versuche, ausgehend von einem Teil der Abstände zwischen den Schaltflächen zu scribbeln, wird die Überlagerungsansicht des Scribbles richtig angezeigt. Wenn ich jedoch von oben auf UIButton schreibe, fängt das UIButton das Berührungsereignis ein und leitet es nicht an meine UIInputViewController weiter.

Wie kann ich meine Tastatur so implementieren, dass meine Scribble-Overlay-Ansicht angezeigt wird, wenn der Benutzer zwischen den Schaltflächen kritzelt, aber ansonsten mit den Tasten drückt/wischt?

--EDIT--

Ich habe versucht, dies die touchesBegan/Moved/Ended/Cancelled Methoden durch zwingende zu lösen das Ereignis zum nächsten Responder zu übermitteln. Wenn ich auf einen Knopf klicke und dann auf einen anderen klicke, kann ich ein Bild zwischen den beiden sehen. Ich kann jedoch immer noch nichts als Knopfdruck zwischen den Tasten auf den Knopf ziehen. Hat jemand eine bessere Idee?

--edit # 2--

Derzeit ist meine Ansicht Hierarchie wie folgt aufgebaut: UIView (aus den UIInputViewController) Subviews: Alle meine Knöpfe, dann meine ScribbleView die Subviews überlagert.

Wenn ich auf meiner ScribbleViewuserInteractionEnabled auf true setzen, kann ich kritzeln, um irgendwo zu erscheinen, unabhängig von der Startposition, aber dann verliere ich meine Schaltfläche Funktionalität.

Was Quellcode betrifft, habe ich mit verschiedenen Konfigurationen von passierenden Ereignissen experimentiert und was nicht, aber der Hauptteil des Codes kann hier gefunden werden: https://github.com/Kamaros/ELDeveloperKeyboard.

Antwort

0

Ich rate hier, da ich noch nicht versucht habe, mit UIInputViewControllers zu arbeiten. Aber wie wäre es mit Unterklassen UIButton und überschreiben dann die touchesBegan:withEvent: und touchesEnded:withEvent: Methoden, um diese Ereignisse an Ihre UIInputViewController weiterzuleiten?

+0

Definitiv eine Option, obwohl ich nicht sicher bin, wie dies in Verbindung mit den Gestenerkennern funktioniert, die ich an jede Taste angehängt habe. Einen Versuch wert, wenn niemand an etwas schlauer denkt. – Kamaros

+0

Da Sie das Gekritzel zwischen den Schaltflächen erhalten (und nicht auf den Schaltflächen), ist es nicht nur eine Frage der Ansichtshierarchie? Ich meine, zeichnest du nicht unter dem Button selbst? Auch hier ist es nur eine Vermutung, da ich keinen Zugriff auf Ihren Code habe. Alternativ können Sie, wenn Sie auf Kludges stehen, immer eine leere UIView über alle Schaltflächen legen und darauf zeichnen, anstatt sie dort zu zeichnen, wo Sie gerade zeichnen. –

0

Ich denke, Sie müssen Ihre ScribbleView interationEnabled auf JA setzen und auf die Schaltfläche unterhalb der TouchEvents weiterleiten, die Sie nicht möchten. Wenn Sie zum Beispiel ein langes Drücken an der gleichen Stelle oder ein Tippen bemerken, wissen Sie, dass der Benutzer die Taste drücken möchte.