操作と慣性の概要
操作では、ユーザーはマニピュレーターを使用してユーザー インターフェイス (UI) 要素を移動、回転、およびサイズ変更できます。 マニピュレーターは、マウス、または (タッチ機能が有効になっているシナリオでは) スタイラスや指を意味します。
慣性では、UI 要素の摩擦力をシミュレートすることによって、動作中の UI 要素の現実の世界での動作がエミュレートされます。 これにより、停止位置に移動するまでの要素の動きは (線形および角度の両方で) 徐々に遅くなります。 ここでは、.NET Framework での操作と慣性について概要を説明します。
操作
操作では、マニピュレーターのコレクションを複合オブジェクトとして扱います。 アプリケーションは、個々のコンポーネントに対する変更ではなく、複合オブジェクトに対する変更を追跡できます。
次の図のイメージを使って説明します。 ユーザーは、2 つのマニピュレーターを使用してイメージの移動、回転、スケーリングを行うことができます。 各マニピュレーターに加えた変更は、もう一方のマニピュレーターと共に解釈されます。
たとえば、イメージに示すような 2 つのマニピュレーター (1 および 2) がある場合、マニピュレーター 1 を +Y 方向 (下) に動かしたときのイメージでの変化は、マニピュレーター 2 の状況に応じて変化します。 マニピュレーター 2 も同様に +Y 方向 (下) に動かすと、イメージは単純に +Y 方向に移動します。 しかし、マニピュレーター 2 を変更しないか、または -Y 方向 (上) に動かすと、イメージは小さくなるか、または回転されます。
2 つのマニピュレーターで操作されるイメージ
操作処理は、マニピュレーターのサブセットを監視するフレームワークを提供し、マニピュレーターが (個別にではなく) 一緒に動作しているように解釈します。 アプリケーションで操作される UI 要素ごとに、複数の操作プロセッサ オブジェクトを同時に作成することができます。 操作プロセッサには監視する入力デバイスが通知され、.NET イベントを介して操作を報告します。
操作プロセッサは、操作される特定の要素に関する情報は持ちません。 アプリケーションは単独で、アプリケーション固有の要素に変更を適用します。 たとえば、アプリケーションはイメージに対して変換を適用し、それを再描画して、新しい場所に、または新しいサイズや方向付けで表示します。
操作は 2 次元 (2D) のアフィン変換に対応するように設計されています。 これらの変換には、平行移動、回転、スケーリングが含まれます。
操作の部分
操作は Manipulator2D オブジェクトのコレクションです。 この集約操作は、基準点と楕円で表されます。 基準点は、要素を操作しているすべてのマニピュレーターの平均的な位置です。 楕円には、基準点から各 Manipulator2D オブジェクトへの平均距離が半径として設定されます。
2 つのマニピュレーター (1 および 2)、基準点、楕円で操作を指定
マニピュレーターが UI 要素に対して追加、移動、または削除されると、アプリケーションは ProcessManipulators() メソッドを呼び出して ManipulationProcessor2D オブジェクトを更新します。 操作が始まると、Started イベントが発生します。
![]() |
---|
操作の処理は、フレーム ベースの更新環境で使用すると、効率が高くなります。Microsoft XNA アプリケーションで操作処理を使用する場合は、XNA フレームワークが Game.Update メソッドを使用してフレーム ベースの更新を提供するため、これは該当しません。別の環境 (WinForms など) では、操作を収集してそれを定期的に ProcessManipulators() メソッドに送信する処理をバッチで実行するために、専用のフレーム ベースのロジックを提供することが必要になる場合があります。 |
マニピュレーターの数やその位置に変更が生じると、Delta イベントが発生します。 Delta イベント ハンドラーに渡される Manipulation2DDeltaEventArgs オブジェクトのプロパティには、最後のイベントの後に発生した基準点、スケーリング、回転、平行移動での変更を指定します。 操作の基準点は、マニピュレーターが移動したときと、マニピュレーターが追加または削除されたときに変更されます。 平行移動の値には、操作で行う X 方向 Y 方向の移動距離を指定します。
新しい値を使用して、アプリケーションは UI 要素を再描画します。
マニピュレーター 1 の移動と基準点の変更
操作に関連付けられた最後のマニピュレーターが ManipulationProcessor2D オブジェクトから削除されると、Completed イベントが発生します。
操作処理のモデル
操作プロセッサは、直接使用のモデルを使用します。 この単純なモデルを使用する場合、アプリケーションは操作処理に対して入力イベントの詳細を渡す必要があります。 マウス デバイス、スタイラス、指などの入力プリミティブ (基本的な入力方法) によって、入力イベントが発生します。 この処理により、直接的なフィルター処理メカニズムと単純な使用モデルが提供され、アプリケーションは必要に応じて入力イベントをバッチ処理できるようになります。
操作処理に入力プリミティブを使用するアプリケーションの場合、入力プリミティブの詳細情報から Manipulator2D 構造体を作成し、その構造体を ProcessManipulators() メソッドを使用して操作プロセッサに渡します。 次に、操作プロセッサはイベントを発生させます。アプリケーションはこのイベントを処理して、適切な方法でビジュアル コンポーネントを更新する必要があります。
操作処理のモデル
慣性
慣性プロセッサを使用すると、アプリケーションは現実の世界での動作をシミュレートすることで、UI 要素の位置、方向、その他のプロパティを推定できます。
たとえば、ユーザーが要素をフリックしたときに、継続して移動させ、減速して、徐々に停止させることができます。 慣性プロセッサは、アフィン 2D 値 (基準点、スケーリング、平行移動、および回転) を指定した時間中に指定の減速度で変更することで、この動作を実装します。
操作プロセッサと同様、慣性プロセッサも特定の UI 要素に関する情報は持ちません。 InertiaProcessor2D オブジェクトで発生したイベントに応答して、アプリケーションは単独で、アプリケーション固有の要素に変更を適用します。
操作処理と慣性処理は、多くの場合、併用されます。 これらのインターフェイスは類似しており、(ある状況下では) 発生させるイベントも同じです。 一般に、慣性処理は、UI 要素の操作が完了したときに開始します。 これは、Completed イベントをリッスンし、そのイベント ハンドラーから慣性処理を開始することで実現されます。