InteractionTracker 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
處理可在 ExpressionAnimations 中做為目標的輸入邏輯,通常是根據輸入驅動視覺效果的動作。
public ref class InteractionTracker sealed : CompositionObject
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.LiftedContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class InteractionTracker final : CompositionObject
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
class InteractionTracker final : CompositionObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.LiftedContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class InteractionTracker : CompositionObject
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
public sealed class InteractionTracker : CompositionObject
Public NotInheritable Class InteractionTracker
Inherits CompositionObject
- 繼承
- 屬性
範例
void SetupSimpleInteractionTracker(Visual viewportVisual, Visual contentVisual)
{
//
// Create the InteractionTracker and set its min/max position and scale. These could
// also be bound to expressions. Note: The scrollable area can be changed from either
// the min or the max position to facilitate content updates/virtualization.
//
_tracker = InteractionTracker.Create(_compositor);
_tracker.MaxPosition = new Vector3(
contentVisual.Size.X - viewportVisual.Size.X,
contentVisual.Size.Y - viewportVisual.Size.Y,
0.0f);
_tracker.MinScale = 0.5f;
_tracker.MaxScale = 4.0f;
//
// Configure the interaction source. Enable input with inertia on all axes.
//
var interactionSource = VisualInteractionSource.Create(viewportVisual);
interactionSource.PositionXSourceMode = InteractionSourceMode.EnabledWithInertia;
interactionSource.PositionYSourceMode = InteractionSourceMode.EnabledWithInertia;
interactionSource.ScaleSourceMode = InteractionSourceMode.EnabledWithInertia;
_tracker.InteractionSources.Add(interactionSource);
//
// Bind the InteractionTracker outputs to the contentVisual.
//
var positionExpression = _compositor.CreateExpressionAnimation("-tracker.Position");
positionExpression.SetReferenceParameter("tracker", _tracker);
contentVisual.StartAnimation("Offset", positionExpression);
var scaleExpression = _compositor.CreateExpressionAnimation("Vector3(tracker.Scale, tracker.Scale, 1.0)");
scaleExpression.SetReferenceParameter("tracker", _tracker);
contentVisual.StartAnimation("Scale", scaleExpression);
}
備註
InteractionTracker 是狀態機器,可由使用中輸入或明確呼叫來更新或產生其屬性的動畫所驅動。 InteractionTracker 類別旨在啟用輸入,以驅動 CompositionAnimation,以取得自定義互動體驗。 若要建置互動式體驗,必須將一或多個visualInteractionSource 與 InteractionTracker產生關聯。
常見案例
IneractionTracker 的目的是要用於:
- 新增自定義撥動行為,例如撥動 ListView 專案或其他視覺效果以刪除/關閉
- 系結至移動瀏覽的轉換,例如在「已關閉」和「開啟」狀態之間切換
- 效果的輸入驅動動畫,例如移動流覽會導致螢幕模糊
- 自定義控件,例如建立具有不同行動流覽速度或以程式設計方式控制 ScrollViewer 的自定義實作
InteractionTracker 狀態和轉換
InteractionTracker 是狀態機器,具有四種狀態:
- 閑置:沒有作用中的輸入或動畫驅動 InteractionTracker
- 互動:作用中使用者輸入正在推動 InteractionTracker
- 慣性:使用中輸入或程序設計速度所產生的作用中動畫會驅動 InteractionTracker
- CustomAnimation:InteractionTracker 的屬性正以動畫顯示下圖顯示這四種狀態,以及哪些狀態轉換有效。
狀態轉換可能會因為使用者動作(例如啟動或停止操作)或因對 InteractionTracker 上方法的明確呼叫而發生。 每當發出其中一個明確呼叫時,都會發出 requestID 來追蹤要求是否被忽略或造成狀態變更。
請務必注意,InteractionTracker 正在與使用它的應用程式不同的進程中執行。 因此,InteractionTracker 和相關聯類別上的所有方法呼叫都是異步的,如同透過 IInteractionTrackerOwner 介面發出的回呼一樣。
下列說明觸發每個狀態變更要發生的動作:
開始狀態 | 結束狀態 | 可能的觸發程式 |
---|---|---|
怠 | 交互 | 只有在執行與 InteractionTracker 相關聯之 VisualInteractionSource 的使用者操作時,才會發生此狀態轉換。 |
怠 | 慣性 | 只有當 InteractionTracker 處於閑置狀態且呼叫 TryUpdatePositionWithVelocity 或 TryUpdateScaleWithVelocity 時,才會發生此狀態轉換。 |
怠 | CustomAnimation | 當 InteractionTracker 處於閑置狀態且呼叫 TryUpdatePositionWithAnimation 或 TryUpdateScaleWithAnimation 時,就會發生此狀態轉換。 |
交互 | 慣性 | 只有在傳送至 InteractionTracker 的使用者操作完成時,才會發生此狀態轉換。 當作用中輸入結束時,InteractionTracker 會進入慣性狀態,以及手指釋放速度和 InertiaDecayRate 等資訊將決定慣性狀態期間的行為。 |
慣性 | 怠 | 當用來更新位置和/或縮放比例的函式不再產生變更時,就會發生此狀態轉換。 換句話說,位置和縮放速度都已設為零。 如果在沒有動畫或速度的情況下明確更新位置或縮放比例的呼叫,也會發生此狀態轉換。 這些呼叫將會結束慣性,並使用更新的屬性值轉換為Idle。 |
慣性 | 慣性 | 當 TryUpdatePositionWithVelocity 或 TryUpdateScaleWithVelocity 已在慣性狀態時呼叫時,就會發生此狀態轉換。 重新輸入慣性會導致重新評估所有 InertiaStateEntered 屬性。 |
慣性 | CustomAnimation | 當在慣性 sate 中呼叫 TryUpdatePositionWithAnimation 或 TryUpdateScaleWithAnimation 時,就會發生此狀態轉換。 |
慣性 | 交互 | 當從點擊測試到 VisualInteractionSource 的使用者作用中輸入完成之前,就會發生此狀態轉換。 |
CustomAnimation | 怠 | 當 InteractionTracker 的位置和縮放屬性上設定的所有動畫都已完成時,就會發生此狀態轉換。 |
CustomAnimation | CustomAnimation | 當呼叫 TryUpdatePositionWithAnimation 或 TryUpdateScaleWithAnimation 時,就會發生此狀態轉換,同時已處於 CustomAnimation 狀態。 |
CustomAnimation | 慣性 | 當在 CustomAnimation 狀態中呼叫 TryUpdatePositionWithVelocity 或 TryUpdateScaleWithVelocity 時,就會發生此狀態轉換。 |
CustomAnimation | 交互 | 執行與 InteractionTracker 相關聯之 VisualInteractionSource 的使用者操作時,就會發生此狀態轉換。 |
InteractionTracker 所做的任何狀態轉換都會產生回呼,指出具有args的新狀態,其中包含與該狀態相關的資訊,以及造成狀態變更之要求的 requestID。 使用者的作用中操作會導致 requestID 為 0。 任何 Try* 呼叫都會發出 requestID,可用來追蹤導致狀態變更的 Try* 呼叫。 應用程式存留期間的第一個 requestID 會是 1,而後續的每個呼叫都會遞增 requestID,這表示每個要求都會是唯一的。
InteractionTracker 位置和縮放比例
InteractionTracker 的兩個最常用的屬性是位置和縮放比例。 每當變更其中一或兩個屬性時,ValuesChanged 回呼就會傳送目前值的相關信息。 由於 InteractionTracker 的異步本質,透過 InteractionTracker 回呼接收的值是更新 InteractionTracker 及其屬性目前狀態和值的應用程式邏輯的最佳方式。
InteractionTracker 的重要區別在於其位置和縮放比例與任何特定視覺效果的座標空間無關。 在建立 InteractionTracker 時,其位置會有向量設定為 0 的 x、y 和 z 子通道,而小數位數會設定為 1。 只有作用中的輸入或 Try* 呼叫可能會導致這些值變更。 每個屬性的最小值和最大值會決定值可以變動的範圍。 其中一個例外狀況是“overpan” 或 “overzoom” 的概念,其中作用中操作可能會導致值略高於互動狀態的最小值或最大值。 不過,當操作完成時,值一律會放在設定範圍內。 CustomAnimations 一律會固定在設定位置和刻度的範圍內。
InteractionTracker 座標空間概念與螢幕座標的概念一致,其中向上/左動作會增加位置值,而向下/右動作會減少位置值。 因此,將位置屬性附加至 Visual 的 Offset 時,很常見。
根據預設,最小和最大位置通道都是0,最小和最大刻度值為1。 如果任一屬性所需的行為是允許它在這些起始值之外變更,則必須更新最小值/最大值。
InteractionTracker 和 ExpressionAnimations
InteractionTracker 會公開各種屬性,這些屬性可用於 expressionAnimation s 的內容中,以驅動 CompositionObject s 動畫屬性的更新。 由於 InteractionTracker 的異步本質,不建議直接查詢這些屬性。 相反地,您應該使用回呼中傳遞的屬性來驅動應用程式邏輯,並參考 ExpressionAnimation 中的值,以更新可動畫屬性。
如上所述,InteractionTracker 的兩個最常用的屬性是 Position 和 Scale 屬性。 這些屬性會更新以回應使用者輸入和 Try* 呼叫。 在 ExpressionAnimations 內使用這些屬性會導致 CompositionObjects 的動畫屬性在回應中更新。 例如,InteractionTracker.position 屬性可能會系結至 Visual 的 Offset。 使用這些屬性來填入可追蹤進度的 CompositionPropertySet,進而驅動一系列協調動畫。
將輸入導向至 InteractionTracker
設定之後,InteractionTracker 仍然需要最後一個步驟才能實際接收觸控輸入和回應。 請參閱 VisualInteractionSource 上的檔。TryRedirectForManipulation,以取得設定傳入輸入以流入 InteractionTracker 的詳細資訊。
屬性
Comment |
要與 CompositionObject 建立關聯的字串。 (繼承來源 CompositionObject) |
Compositor |
用來建立這個 CompositionObject的 Compositor。 (繼承來源 CompositionObject) |
DispatcherQueue |
取得 CompositionObject 的 DispatcherQueue。 (繼承來源 CompositionObject) |
ImplicitAnimations |
附加至這個物件的隱含動畫集合。 (繼承來源 CompositionObject) |
InteractionSources |
產生互動的物件集合。 |
IsInertiaFromImpulse |
取得值,這個值表示慣性是否為衝動的結果。 |
IsPositionRoundingSuggested |
布爾值,指出目前是否建議位置四捨五入。 |
MaxPosition | |
MaxScale |
InteractionTracker的最大縮放比例。 |
MinPosition |
InteractionTracker允許的最低位置。 |
MinScale |
InteractionTracker的最低小數位數。 |
NaturalRestingPosition |
InteractionTracker的自然休息位置。 NaturalRestingPosition 屬性是 InteractionTracker 會停止的計算位置,而不會考慮界限或慣性修飾詞。 此屬性通常適用於卷動體驗中虛擬化之類的動作,請務必知道 interactionTracker 停止的位置 |
NaturalRestingScale |
InteractionTracker的自然休息規模。 NaturalRestingScale 屬性是 InteractionTracker 將停止的計算尺規位置,而不考慮界限或慣性修飾詞。 此屬性通常適用於卷動體驗中虛擬化之類的動作,請務必知道 interactionTracker 停止的位置 |
Owner | |
Position |
InteractionTracker 所計算的輸出位置。 目前的位置是相對值。 在Idle和 CustomAnimation 狀態期間,它一律會在MinPosition和 MaxPosition 屬性中指定的值之間。 InteractionTracker 的位置屬性可以在互動和慣性狀態期間超出此範圍,以顯示界限的反彈或阻力。 InteractionTracker 的位置屬性是 Vector3,代表 X、Y 和 Z 軸中的位置。 X 和 Y 通道是 InteractionTracker 目前唯一更新的元件。 如果未設定 MinPosition 和 MaxPosition,此 Vector3 的通道將不會在 0 以外波動(預設值)。 |
PositionInertiaDecayRate |
位置的慣性衰變速率。 範圍從 0 到 1。 PositionInertiaDecayRate 屬性會定義當進入慣性且位置變更時,InteractionTracker 速度會變慢到停止的速度。 越接近 1,interactionTracker 越快 |
PositionVelocityInPixelsPerSecond |
目前套用至位置的速度。 PositionVelocityInPixelsPerSecond 屬性代表在慣性中時 InteractionTracker 的目前位置速度。 這個屬性有兩個主要的使用案例:在互動發生后立即擷取 InteractionTracker 的位置速度,或參考 ExpressionAnimation中 InteractionTracker 的最新速度。 |
Properties |
與 compositionObject 相關聯的屬性集合,。 (繼承來源 CompositionObject) |
Scale |
InteractionTracker所計算的輸出小數字數。 目前的小數字數是一個相對值,取決於 MinScale 中指定的值,MaxScale 屬性。 |
ScaleInertiaDecayRate |
縮放比例的慣性衰變速率。 範圍從 0 到 1。 ScaleInertiaDecayRate 屬性會定義當進入慣性且縮放正在變更時,InteractionTracker 速度會變慢到停止的速度。 越接近 1,interactionTracker 越快 |
ScaleVelocityInPercentPerSecond |
縮放比例的變更率。 ScaleVelocityInPercentPerSecond 屬性代表在慣性中時 InteractionTracker 的目前縮放速度。 在互動發生之後立即擷取 InteractionTracker 的位置速度,或參考 ExpressionAnimation中 InteractionTracker 的最新速度。 |
方法
AdjustPositionXIfGreaterThanThreshold(Single, Single) |
如果大於指定的臨界值,則調整 x 座標的位置。 |
AdjustPositionYIfGreaterThanThreshold(Single, Single) |
如果大於指定的臨界值,則調整位置 y 座標。 |
Close() |
關閉 CompositionObject 並釋放系統資源。 (繼承來源 CompositionObject) |
ConfigureCenterPointXInertiaModifiers(IIterable<CompositionConditionalValue>) |
取得 CompositionConditionalValue 的已排序列表。 在框架中,當追蹤器處於慣性狀態時,第一個將它設為 “的 CompositionConditionalValue。Condition“ 評估為 true 會取代追蹤器使用其 ”“ 的縮放 CenterPointX 值。Value“. 如果沒有評估為 true,則 CenterPointX 不會取代該框架。 |
ConfigureCenterPointYInertiaModifiers(IIterable<CompositionConditionalValue>) |
取得 CompositionConditionalValue 的已排序列表。 在框架中,當追蹤器處於慣性狀態時,第一個將它設為 “的 CompositionConditionalValue。Condition“ 評估為 true 會取代追蹤器使用其 ”“ 的縮放 CenterPointY 值。Value“. 如果沒有評估為 true,則 CenterPointY 不會取代該框架。 |
ConfigurePositionXInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
將 InteractionTrackerInertiaModifier 物件的集合套用至 InteractionTracker 的 x 慣性。 ConfigurePositionXInertiaModifiers 方法會將 InteractionTrackerInertiaModifiers 的個人或集合套用至 InteractionTracker的 x 元件。 系統會依照新增至 InteractionTracker 的順序,評估每個 X 修飾詞的條件屬性。 因此,InteractionTrackerInertiaModifier 在集合中的順序會與系統評估的順序相同。 |
ConfigurePositionYInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
將 InteractionTrackerInertiaModifier 物件的集合套用至 InteractionTracker 的 y 慣性。 ConfigurePositionYInertiaModifiers 方法會將 InteractionTrackerInertiaModifier的個人或集合套用至 InteractionTracker的 y 元件。 系統會根據新增至 InteractionTracker 的順序,評估每個 Y 修飾詞的條件屬性。 因此,InteractionTrackerInertiaModifier 在集合中的順序會與系統評估的順序相同。 |
ConfigureScaleInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
將 InteractionTrackerInertiaModifier 物件的集合套用至 InteractionTracker 的縮放比例。 ConfigureScaleInertiaModifiers 方法會將 InteractionTrackerInertiaModifier的個別或集合套用至 InteractionTracker的縮放元件。 系統會依照新增至 InteractionTracker 的順序,評估每個 Scale 修飾詞的條件屬性。 因此,InteractionTrackerInertiaModifier 在集合中的順序會與系統評估的順序相同。 |
ConfigureVector2PositionInertiaModifiers(IIterable<InteractionTrackerVector2InertiaModifier>) |
將 InteractionTrackerInertiaModifier 物件的集合套用至 InteractionTracker 的位置。 |
Create(Compositor) |
建立 interactionTracker 這個 Create 方法會具現化 InteractionTracker。 建立 InteractionTracker 設定屬性之後,附加 VisualInteractionSource,並在 ExpressionAnimation中參考位置或縮放比例,使用中的輸入可以驅動 ExpressionAnimation。 |
CreateWithOwner(Compositor, IInteractionTrackerOwner) |
使用指定的擁有者建立 InteractionTracker 實例。 這個 Create 方法會具現化 InteractionTracker,擁有者註冊回呼。 建立 InteractionTracker 設定屬性之後,附加 VisualInteractionSource,並在 ExpressionAnimation中參考位置或縮放比例,使用中的輸入可以驅動 ExpressionAnimation。 只有在應用程式需要接收 InteractionTracker的狀態和值回呼時,才需要與擁有者建立 InteractionTracker。 |
Dispose() |
執行與釋放、釋放或重設非受控資源相關聯的應用程式定義工作。 (繼承來源 CompositionObject) |
GetBindingMode(InteractionTracker, InteractionTracker) |
擷取兩個互動追蹤器之間的系結軸模式。 |
PopulatePropertyInfo(String, AnimationPropertyInfo) |
定義可以產生動畫效果的屬性。 (繼承來源 CompositionObject) |
SetBindingMode(InteractionTracker, InteractionTracker, InteractionBindingAxisModes) |
設定兩個互動追蹤器之間的系結軸模式。 |
StartAnimation(String, CompositionAnimation, AnimationController) |
連接動畫與 物件的指定屬性,並啟動動畫。 (繼承來源 CompositionObject) |
StartAnimation(String, CompositionAnimation) |
連接動畫與 物件的指定屬性,並啟動動畫。 (繼承來源 CompositionObject) |
StartAnimationGroup(ICompositionAnimationBase) |
啟動動畫群組。 |
StopAnimation(String) |
中斷動畫與指定屬性的連接,並停止動畫。 (繼承來源 CompositionObject) |
StopAnimationGroup(ICompositionAnimationBase) |
停止動畫群組。 (繼承來源 CompositionObject) |
TryGetAnimationController(String) |
傳回在指定屬性上執行之動畫的 AnimationController。 (繼承來源 CompositionObject) |
TryUpdatePosition(Vector3, InteractionTrackerClampingOption, InteractionTrackerPositionUpdateOption) |
嘗試使用指定的固定選項來更新 InteractionTracker 的位置。 |
TryUpdatePosition(Vector3, InteractionTrackerClampingOption) |
嘗試使用指定的固定選項來更新 InteractionTracker 的位置。 |
TryUpdatePosition(Vector3) |
嘗試更新 interactionTracker位置 TryUpdatePosition 方法會將 interactionTracker |
TryUpdatePositionBy(Vector3, InteractionTrackerClampingOption) |
嘗試使用指定的固定選項,透過指定的量調整 InteractionTracker 的位置。 |
TryUpdatePositionBy(Vector3) |
嘗試依指定的數量調整 InteractionTracker的位置。 TryUpdatePositionBy 方法會依指定為參數的 Vector3 差異,更新 InteractionTracker 的目前位置。 與 TryUpdatePosition類似,TryUpdatePositionBy 可用來以宣告方式移動 InteractionTracker,而不需要動畫或慣性。 TryUpdatePositionBy 可以從閑置、CustomAnimation 或慣性狀態呼叫 – 這麼做會移動所定義差異 InteractionTracker 的位置,並進入閑置狀態。 |
TryUpdatePositionWithAdditionalVelocity(Vector3) |
嘗試藉由新增速度來更新 InteractionTracker的位置。 TryUpdatePositionWithAdditionalVelocity 方法會將輸入 Vector3 新增為 InteractionTracker的目前速度。 因此,由於 InteractionTracker 的速度已變更,因此,InteractionTracker 的目標待用位置現在會變更。 TryUpdatePositionWithAdditionalVelocity 可以從 Idle、Inertia 或 CustomAnimation 狀態呼叫 – 這麼做會新增或更新 interactionTracker |
TryUpdatePositionWithAnimation(CompositionAnimation) |
嘗試套用動畫來更新 InteractionTracker的位置。 TryUpdatePositionWithAnimation 方法會根據 |
TryUpdateScale(Single, Vector3) |
嘗試將小數字數更新為指定的值。 TryUpdateScale 方法會將 interactionTracker 縮放位置 更新為參數所指定的 Scale 位置和中心點。 TryUpdateScale 可用來以宣告方式定義任何時間點 InteractionTracker 的規模(從某個狀態輸入的事件開始等等)。 TryUpdateScale 可以從 Idle、CustomAnimation 或慣性狀態呼叫 – 這麼做會將 InteractionTra cker 的縮放位置移至定義的位置並進入閑置狀態。 |
TryUpdateScaleWithAdditionalVelocity(Single, Vector3) |
嘗試藉由新增指定的速度來更新尺規。 TryUpdateScaleWithAdditionalVelocity 方法會將代表額外速度的輸入純量新增至 InteractionTracker 的目前速度,並將中心點移至輸入的 Vector3。 因此,由於 InteractionTracker 的速度已變更,因此,InteractionTracker 的目標 rest 縮放位置現在會變更。 TryUpdateScaleWithAdditionalVelocity 可以從 Idle、Inertia 或 CustomAnimation 狀態呼叫 – 這麼做會新增或更新 InteractionTracker 的速度並進入慣性狀態。 |
TryUpdateScaleWithAnimation(CompositionAnimation, Vector3) |
嘗試使用指定的動畫來更新縮放比例。 TryUpdateScaleWithAnimation 方法會根據輸入為參數 |