操作和慣性概觀
操作讓使用者可以透過操作工具移動、旋轉使用者介面 (UI) 和調整其大小。 操作工具表示滑鼠,或是可進行觸控時的手寫筆或手指。
慣性會模擬移動中 UI 項目所受到的摩擦力,藉以模擬真實世界中的移動行為。 這會讓項目的移動速度 (線性速度和角速度) 逐漸變慢到停止為止。 本文會簡介 .NET Framework 的操作和慣性。
操作
操作會將操作工具的集合當成單一複合物件使用。 應用程式可以追蹤複合物件的變更,而不是個別元件的變更。
以下圖中的影像為例。 使用者可以使用操作工具移動、旋轉影像和調整其大小。 每個操作工具的變更會連同其餘操作工具一起受到解譯。
例如,如果您在影像上有兩個操作工具 (1 和 2),您以 +Y 方向 (向下) 移動操作工具 1,影像的變更會以操作工具 2 的變更為基礎進行。 如果操作工具 2 也向 +Y 方向 (向下) 移動,則影像只會往 +Y 方向移動。 但是如果操作工具 2 沒有變更,或者向 -Y 方向 (向上) 移動,則影像會變小或旋轉。
由兩個操作工具操作的影像
操作處理提供了架構來監視操作工具的子集,並且將這些操作工具當成相依運作 (非單獨運作) 的操作工具來解譯。 您可以同時建立數個操作處理器物件,每個物件各代表一個要在應用程式中操作的 UI 項目。 操作處理器會得知要觀察的輸入裝置,並且透過 .NET 事件 報告操作。
操作處理器並沒有關於要操作之特定項目的資訊。 應用程式會將變更另外套用至應用程式特有項目。 例如,應用程式會將轉換套用至影像,或是重繪影像以用新的位置、大小或方向來顯示影像。
操作是針對二維 (2-D) 仿射轉換 所設計。 這些轉換包括平移、旋轉和縮放。
操作的部分
操作是 Manipulator2D 物件的集合。 這個彙總操作是以原點和橢圓形表示。 原點是操作某個項目之所有操作工具的平均位置。 橢圓形的半徑是從原點到每個 Manipulator2D 物件的平均距離。
由兩個操作工具 (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 項目的位置、方向和其他屬性進行外插補動作。
例如,當使用者輕拂項目時,它會繼續移動、減速,然後慢慢停止。 慣性處理器實作這個行為的方式,是讓仿射 2-D 值 (原點、縮放、平移和旋轉) 在指定時間內以指定的減速率變更。
和操作處理器一樣,慣性處理器並沒有關於任何特定 UI 項目的資訊。 為了回應在 InertiaProcessor2D 物件上引發的事件,應用程式會將變更另外套用至應用程式特有項目。
慣性處理和操作處理通常會一起使用。 它們的介面類似,而且所引發的事件 (在某些情節中) 也相同。 一般來說,慣性處理會在 UI 項目的操作完成時開始。 這是透過接聽 Completed 事件,然後從該事件處理常式啟動慣性處理來完成。