Frage

Ich versuche, eine Volumen-Steuerartigen runder Knopf zu implementieren. Zur Zeit kann ich klaut durch die Gestenerkenner erkennen. Wie kann ich eine kreisförmige Geste (im Uhrzeigersinn und gegen den Uhrzeigersinn) auf der Schaltfläche erkennen? Dank!

War es hilfreich?

Lösung

Sie suchen nach einer One-Touch-Geste (wie ein kreisförmiger Schieber) oder eine Zwei-Touch-Geste (wie Greifen und Drehen eines realen Knopfes)? Wenn letzteres, werfen Sie einen Blick auf UIRotationGestureRecognizer .

Wenn das ehemalige, bist du ziemlich viel auf eigene Faust. Sie können Ihre Lösung als Ihre eigenen Gestenerkenner sicher implementieren: Das von Apple erwartet wird, und es gibt einige Dokumentation Sie zu erhalten begonnen (obwohl ich nicht viele Arbeitsbeispiele da draußen gesehen haben). Siehe auch Wie richtig Unterklasse UIGestureRecognizer .

Als allgemeiner Ansatz, würde ich denken, die Region für die Geste als eine Donut-Form: eine Zone mit Zentrum c , Innenradius r1 und Außenradius r2 . Wenn der Benutzer aufsetzt Sie den Abstand von berechnen c mit dem Satz des Pythagoras und der Winkel mit Ihrem Liebling trigonometrischen Funktion. Damit können Sie bestimmen, ob die Berührung innerhalb der Zone ist. Da der Benutzer zieht, können Sie den Steuerwert auf den Winkel basierend aktualisieren. Irgendwann werde berühren sie entweder nach oben oder ziehen außerhalb der Zone, und das wird die Geste beenden. Ich schlage vor, so dass die Berührung ziemlich weit nach innen verirren r1 oder außerhalb von r2 . Finger sind ungenau Werkzeuge

Andere Tipps

Wie andernfalls eine Lösung zu finden, und durch logische Inspiration von @ Sixten Antwort, ich habe etwas Nützliches gegangen und erstellt, es ist nicht kugelsicher, aber es scheint zu tun, was ich jetzt brauche.

Bitte jemand, gabelt es, Klon es, nutzt es, sich verbessern, es ist Open Source, hier ist mein Repo-Link:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

Haben Sie versucht, Ihren eigenen Gestenerkenner zu schreiben? Es gibt in der Dokumentation eine detaillierte Anleitung.

beste Weg wäre Benutzerdefinierte Gestenerkenner implementieren. Ich weiß nicht, ob Sie eine Diskret Geste erfassen möchten (würde Event-Handling-Methode aufgerufen, wenn der Kreis erkannt wurde) oder eine Fortsetzung Gesture (Event-Handling-Methode würde jedes Mal aufgerufen werden Sie mit dem Finger auf einer Kreisbahn bewegen).

kann der Benutzer wahrscheinlich nicht einen perfekten Kreis zeichnen, und die Lösung von @Sixten Otto vorgesehen wäre gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top