Überblick über Manipulationen und Trägheit
Mithilfe von Manipulationen können Benutzer Oberflächenelemente verschieben, drehen und in der Größe ändern, indem sie Manipulatoren verwenden. Ein Manipulator kann eine Maus oder (in einem für die Eingabe per Berührung aktivierten Szenario) ein Tablettstift oder Finger sein.
Trägheit emuliert für bewegliche Benutzeroberflächenelemente ein wirklichkeitsgetreues Verhalten, indem Reibungskräfte simuliert werden. So können die Bewegungen von Oberflächenelementen vor dem Stoppen allmählich verlangsamt werden (sowohl linear als auch winkelförmig). Dieser Artikel enthält eine Einführung in Manipulationen und die Trägheit für .NET Framework.
Manipulationen
Eine Manipulation behandelt eine Auflistung von Manipulatoren wie ein zusammengesetztes Objekt. Eine Anwendung kann die Änderungen am zusammengesetzten Objekt nachverfolgen, anstatt jeweils für die einzelnen Komponenten.
Sehen Sie sich das Bild in der folgenden Abbildung an. Ein Benutzer kann zwei Manipulatoren verwenden, um das Bild zu verschieben, zu drehen und zu skalieren. Die Änderungen an jedem Manipulator werden zusammen mit den anderen Manipulatoren interpretiert.
Beispiel: Wenn Sie zwei Manipulatoren (1 und 2) für das Bild verwenden und Manipulator 1 in +Y-Richtung (nach unten) verschieben, hängt die Änderung des Bilds davon ab, was mit Manipulator 2 passiert. Falls Manipulator 2 auch in +Y-Richtung (nach unten) verschoben wird, bewegt sich das Bild auch in +Y-Richtung. Falls sich Manipulator 2 jedoch nicht ändert oder in -Y-Richtung (nach oben) verschoben wird, wird das Bild verkleinert oder gedreht.
Bild mit zwei Manipulatoren
Bei der Manipulationsverarbeitung wird ein Framework bereitgestellt, das eine Teilmenge von Manipulatoren überwacht und diese gemeinsam und nicht unabhängig voneinander interpretiert. Sie können mehrere Manipulationsprozessorobjekte gleichzeitig erstellen, und zwar eines für jedes Benutzeroberflächenelement, das in einer Anwendung manipuliert werden soll. Ein Manipulationsprozessor wird darüber informiert, welche Eingabegeräte er überwachen soll. Er meldet die Manipulationen dann mithilfe von .NET-Ereignissen.
Ein Manipulationsprozessor weist keine Informationen zum jeweiligen Element auf, das manipuliert wird. Eine Anwendung wendet die Änderungen einzeln auf ein anwendungsspezifisches Element an. Eine Anwendung wendet z. B. Transformationen auf ein Bild an oder zeichnet es neu, um es an seiner neuen Position oder mit einer neuen Größe oder Ausrichtung anzuzeigen.
Manipulationen sind für zweidimensionale (2D) affine Transformationen konzipiert. Diese Transformationen umfassen das Übersetzen, Drehen und Skalieren.
Teile einer Manipulation
Eine Manipulation ist eine Auflistung von Manipulator2D-Objekten. Diese aggregierte Manipulation wird durch einen Ursprungspunkt und eine Ellipse dargestellt. Der Ursprungspunkt ist die durchschnittliche Position aller Manipulatoren, die ein Element manipulieren. Der Radius der Ellipse ist die durchschnittliche Entfernung vom Ursprung zu den einzelnen Manipulator2D-Objekten.
Zwei Manipulatoren (1 und 2), ein Ursprung und eine Ellipse geben eine Manipulation an
Während Manipulatoren für ein Benutzeroberflächenelement hinzugefügt, verschoben oder entfernt werden, aktualisiert eine Anwendung das ManipulationProcessor2D-Objekt, indem sie die ProcessManipulators()-Methode aufruft. Zu Beginn der Manipulation wird das Started-Ereignis ausgelöst.
Hinweis |
---|
Die Manipulationsverarbeitung ist effizienter, wenn sie in einer framebasierten Updateumgebung angewendet wird.Bei Verwendung der Manipulationsverarbeitung in einer Microsoft XNA-Anwendung ist dies kein Problem, weil XNA Framework die framebasierten Updates mithilfe der Game.Update-Methode bereitstellt.In einer anderen Umgebung (z. B. WinForms) kann es erforderlich sein, eine eigene framebasierte Logik bereitzustellen, um Manipulationen zu sammeln und in regelmäßigen Abständen als Batch an die ProcessManipulators()-Methode zu senden. |
Wenn sich die Anzahl an Manipulatoren oder ihre Position ändert, wird das Delta-Ereignis ausgelöst. Die Eigenschaften des Manipulation2DDeltaEventArgs-Objekts, das an den Delta-Ereignishandler übergeben wird, geben Änderungen in Bezug auf Ursprung, Skalierung, Drehung und Übersetzung an, die seit dem letzten Ereignis vorgenommen wurden. Der Ursprung der Manipulation ändert sich, wenn Manipulatoren verschoben, hinzugefügt oder entfernt werden. Übersetzungswerte geben an, welchen Grad an X- oder Y-Bewegung die Manipulation umfasst.
Mithilfe der neuen Werte zeichnet eine Anwendung das Benutzeroberflächenelement neu.
Manipulator 1 wird verschoben und führt zu einer Änderung des Ursprungs
Wenn der letzte Manipulator, der der Manipulation zugeordnet ist, aus dem ManipulationProcessor2D-Objekt entfernt wird, wird das Completed-Ereignis ausgelöst.
Manipulationsverarbeitungsmodell
Ein Manipulationsprozessor verwendet ein Modell der direkten Verwendung. Bei diesem einfachen Modell muss eine Anwendung die Details jedes Eingabeereignisses an den Manipulationsprozessor übergeben. Ein Eingabeereignis kann von jedem beliebigen Eingabeprimitiv ausgelöst werden, z. B. einem Mausgerät, Tablettstift oder Finger. Dieser Prozess verfügt über einen direkten Filtermechanismus und ein einfaches Verwendungsmodell. So kann die Anwendung Eingabeereignisse bei Bedarf als Batch verarbeiten.
Damit eine Anwendung Eingabeprimitive in den Manipulationsprozess einbinden kann, erstellt sie eine Manipulator2D-Struktur aus den Details der Eingabeprimitive und übergibt die Struktur mithilfe der ProcessManipulators()-Methode an den Manipulationsprozessor. Der Manipulationsprozessor löst dann Ereignisse aus, die die Anwendung behandeln muss, um die visuelle Komponente entsprechend zu aktualisieren.
Manipulationsverarbeitungsmodell
Trägheit
Der Trägheitsprozessor ermöglicht Anwendungen das Extrapolieren von Position, Ausrichtung und anderen Eigenschaften eines Benutzeroberflächenelements, indem ein wirklichkeitsgetreues Verhalten simuliert wird.
Wenn ein Benutzer ein Element anstößt, kann es sich z. B. weiterbewegen, sich dann verlangsamen und schließlich langsam zum Stillstand kommen. Der Trägheitsprozessor implementiert dieses Verhalten, indem er bewirkt, dass sich die affinen 2D-Werte (Ursprung, Skalierung, Übersetzung und Drehung) über einen angegebenen Zeitraum und mit einer angegebenen Verlangsamungsrate ändern.
Wie bei der Manipulationsverarbeitung auch, verfügt ein Trägheitsprozessor auch nicht über Informationen über bestimmte Benutzeroberflächenelemente. Als Reaktion auf Ereignisse, die für ein InertiaProcessor2D-Objekt ausgelöst werden, wendet eine Anwendung die Änderungen separat auf ein anwendungsspezifisches Element an.
Die Trägheitsverarbeitung und die Manipulationsverarbeitung werden häufig zusammen verwendet. Ihre Schnittstellen ähneln einander, und die Ereignisse, die sie auslösen, sind (in einigen Fällen) identisch. Im Allgemeinen beginnt die Trägheitsverarbeitung, wenn die Manipulation des Benutzeroberflächenelements abgeschlossen ist. Dies wird durch eine Überwachung des Completed-Ereignisses und das Starten der Trägheitsverarbeitung von diesem Ereignishandler aus erreicht.