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 は、アクティブな入力、またはプロパティを更新またはアニメーション化するための明示的な呼び出しによって駆動できるステート マシンです。
一般的なシナリオ
IneractionTracker は、次の目的で使用することを目的としています。
- ユーザー設定のスワイプ動作を追加する (ListView 項目のスワイプなど、削除/閉じるその他のビジュアル)
- パンに関連付けられた切り替え (たとえば、スワイプして "閉じた" 状態と "開いている" 状態の間の遷移に切り替えるなど)
- パンなどの効果の入力駆動型アニメーションでは、画面がぼかします
- カスタム コントロール (パン速度が異なる ScrollViewer のカスタム実装の作成やプログラムによる制御機能の作成など)
InteractionTracker の状態と遷移
InteractionTracker は、次の 4 つの状態を持つステート マシンです。
- アイドル状態: InteractionTracker を駆動するアクティブな入力またはアニメーションがありません
- 対話: アクティブなユーザー入力が InteractionTracker を駆動している
- 慣性: アクティブな入力またはプログラムによる速度の結果であるアクティブなアニメーションが InteractionTracker を駆動している
- CustomAnimation: InteractionTracker のプロパティが直接アニメーション化されています。次の図は、これらの 4 つの状態と有効な状態遷移を示しています。
状態遷移は、ユーザーアクション (操作の開始や停止など) や InteractionTracker のメソッドの明示的な呼び出しが原因で発生する可能性があります。 これらの明示的な呼び出しのいずれかが行われるたびに、要求が無視されるか、状態変更が発生したかを追跡するために requestID が発行されます。
重要なのは、InteractionTracker を使用しているアプリケーションとは異なるプロセスで実行されていることです。 そのため、InteractionTracker および関連するクラスに対するすべてのメソッド呼び出しは、IInteractionTrackerOwner インターフェイスを介して発行されたコールバックと同様に非同期です。
次に、各状態の変更が発生するトリガーについて説明します。
Begin State | 終了状態 | 考えられるトリガー |
---|---|---|
遊休 | 相互 作用 | この状態遷移は、InteractionTracker に関連付けられている VisualInteractionSource に合わせたユーザー操作が実行されている場合にのみ発生します。 |
遊休 | 慣性 | この状態遷移は、InteractionTracker がアイドル状態で、TryUpdatePositionWithVelocity または TryUpdateScaleWithVelocity が呼び出された場合にのみ発生します。 |
遊休 | CustomAnimation | この状態遷移は、InteractionTracker がアイドル状態で、TryUpdatePositionWithAnimation または TryUpdateScaleWithAnimation が呼び出されたときに発生します。 |
相互 作用 | 慣性 | この状態遷移は、InteractionTracker に送信されたユーザー操作が完了した場合にのみ発生します。 アクティブな入力が終了すると、InteractionTracker は慣性状態になり、指の解放速度や InertiaDecayRate などの情報が慣性状態の間の動作を決定します。 |
慣性 | 遊休 | この状態遷移は、位置やスケールの更新に使用されている関数が変更されなくなった場合に発生します。 言い換えると、位置とスケールの速度の両方がゼロになってしまったのです。 この状態遷移は、アニメーションや速度なしで位置またはスケールを明示的に更新する呼び出しが行われた場合にも発生する可能性があります。 これらの呼び出しは慣性を終了し、更新されたプロパティ値を使用して Idle に遷移します。 |
慣性 | 慣性 | この状態遷移は、既に慣性状態のときに TryUpdatePositionWithVelocity または TryUpdateScaleWithVelocity が呼び出されたときに発生します。 慣性を再入力すると、すべての InertiaStateEntered プロパティが再評価されます。 |
慣性 | CustomAnimation | この状態遷移は、慣性状態のときに TryUpdatePositionWithAnimation または TryUpdateScaleWithAnimation の呼び出しが行われたときに発生します。 |
慣性 | 相互 作用 | この状態遷移は、慣性が完了する前に、VisualInteractionSource にヒット テストするユーザーからのアクティブな入力が入ったときに発生します。 |
CustomAnimation | 遊休 | この状態遷移は、InteractionTracker の位置とスケールのプロパティに設定されているすべてのアニメーションが完了したときに発生します。 |
CustomAnimation | CustomAnimation | この状態遷移は、既に CustomAnimation 状態のときに TryUpdatePositionWithAnimation または TryUpdateScaleWithAnimation の呼び出しが行われた場合に発生します。 |
CustomAnimation | 慣性 | この状態遷移は、CustomAnimation 状態のときに TryUpdatePositionWithVelocity または TryUpdateScaleWithVelocity の呼び出しが行われるときに発生します。 |
CustomAnimation | 相互 作用 | この状態遷移は、InteractionTracker に関連付けられている VisualInteractionSource にヒット テストするユーザー操作が実行されている場合に発生します。 |
InteractionTracker によって行われた状態遷移では、その状態に関連する情報と、状態変更の原因となった要求の requestID を含む引数を含む新しい状態を示すコールバックが生成されます。 ユーザーからのアクティブな操作では、requestID が 0 になります。 Try* 呼び出しでは、状態変更の原因となった Try* 呼び出しを追跡するために使用できる requestID が発行されます。 アプリケーションの有効期間中の最初の requestID は 1 になり、後続の呼び出しごとに requestID がインクリメントされます。つまり、それぞれが一意になります。
InteractionTracker の位置とスケール
InteractionTracker の最も一般的に使用される 2 つのプロパティは、位置とスケールです。 これらのプロパティの一方または両方に変更がある場合は常に、ValuesChanged コールバックに現在の値に関する情報が送信されます。 InteractionTracker の非同期の性質により、InteractionTracker コールバックを通じて受け取る値は、InteractionTracker とそのプロパティの現在の状態と値に関するアプリケーション ロジックを更新する最適な方法です。
InteractionTracker の重要な違いは、位置とスケールが特定のビジュアルの座標空間に関連付けられていないということです。 InteractionTracker が作成されると、その位置にベクターの x、y、z サブチャネルが 0 に設定され、スケールが 1 に設定されます。 アクティブな入力または Try* 呼び出しのみがこれらの値を変更できます。 各プロパティの最小値と最大値によって、値が変動する可能性がある範囲が決まります。 1 つの例外は、"overpan" または "overzoom" という概念です。アクティブな操作では、対話状態の間に値が最小値または最大値をわずかに超える可能性があります。 ただし、操作が完了すると、値は常に設定範囲内に保存されます。 CustomAnimation は、位置とスケールに設定された範囲内で常にクランプされます。
InteractionTracker 座標空間の概念は、上下のモーションによって位置値が増加し、下/右のモーションによって位置値が減少するという点で、画面座標の概念に合わせて調整されます。 その結果、ビジュアルのオフセットにアタッチするときに位置プロパティを否定することが非常に一般的です。
既定では、最小と最大の位置チャネルはすべて 0 で、最小と最大のスケール値は 1 です。 いずれかのプロパティで必要な動作が、これらの開始値の外側で変更できるようにする場合は、最小値/最大値を更新する必要があります。
InteractionTracker と ExpressionAnimations
InteractionTracker は、ExpressionAnimations のコンテキストで使用できるさまざまなプロパティを公開し、CompositionObject のアニメーション化可能なプロパティの更新を促進します。 InteractionTracker の非同期的な性質のため、これらのプロパティを直接照会することはお勧めしません。 代わりに、コールバックで提供されるプロパティを使用してアプリケーション ロジックを駆動し、アニメーション化可能なプロパティを更新するために ExpressionAnimation の値を参照する必要があります。
前述のように、InteractionTracker の最も一般的に使用される 2 つのプロパティは、Position プロパティと Scale プロパティです。 これらは、ユーザー入力と Try* 呼び出しに応答して更新されるプロパティです。 ExpressionAnimations 内でこれらのプロパティを使用すると、CompositionObjects のアニメーション化可能なプロパティが応答で更新されます。 たとえば、InteractionTracker.position プロパティは、ビジュアルのオフセットに関連付けられます。 また、これらのプロパティを使用して進行状況を追跡する CompositionPropertySet を設定することも一般的です。これにより、一連の調整されたアニメーションを実行できます。
InteractionTracker への入力の転送
InteractionTracker を構成した後も、タッチ入力を実際に受信して応答するには、最後の 1 つの手順が必要です。 VisualInteractionSource のドキュメントを参照してください。TryRedirectForManipulation、InteractionTracker にフローするように入力を構成する方法の詳細について説明します。
プロパティ
Comment |
CompositionObject に関連付ける文字列。 (継承元 CompositionObject) |
Compositor |
この |
DispatcherQueue |
CompositionObject の DispatcherQueue を取得します。 (継承元 CompositionObject) |
ImplicitAnimations |
このオブジェクトにアタッチされている暗黙的なアニメーションのコレクション。 (継承元 CompositionObject) |
InteractionSources |
相互作用を生成するオブジェクトのコレクション。 |
IsInertiaFromImpulse |
慣性がインパルスの結果であるかどうかを示す値を取得します。 |
IsPositionRoundingSuggested |
位置の丸め処理が現在推奨されているかどうかを示すブール値。 |
MaxPosition |
InteractionTrackerで許可される最大位置。 |
MaxScale |
InteractionTrackerの最大スケール。 |
MinPosition |
InteractionTrackerに許可される最小位置。 |
MinScale |
InteractionTrackerの最小スケール。 |
NaturalRestingPosition |
InteractionTrackerの自然な静止位置。 NaturalRestingPosition プロパティは、InteractionTracker |
NaturalRestingScale |
InteractionTrackerの自然な休止スケール。 NaturalRestingScale プロパティは、InteractionTracker |
Owner |
InteractionTrackerに関連付けられている IInteractionTrackerOwner。 |
Position |
InteractionTrackerによって計算される出力位置。 現在の位置は相対値です。 アイドル状態と CustomAnimation 状態では、MinPosition プロパティと MaxPosition プロパティで指定された値の間に常に設定されます。 InteractionTracker の position プロパティは、境界でバウンスまたは抵抗を表示するために、Interacting および Inertia 状態の間にこの範囲外に移動できます。 InteractionTracker の position プロパティは、X、Y、Z 軸の位置を表す Vector3 です。 X チャネルと Y チャネルは、この時点で InteractionTracker によって更新される唯一のコンポーネントです。 MinPosition と MaxPosition が設定されていない場合、この Vector3 のチャネルは 0 (既定値) 以外では変動しません。 |
PositionInertiaDecayRate |
位置の慣性減衰率。 範囲は 0 から 1 です。 PositionInertiaDecayRate プロパティは、InteractionTracker が慣性に入り、位置が変化したときに停止に時間がかかる速度を定義します。 1 に近いほど、InteractionTracker の |
PositionVelocityInPixelsPerSecond |
現在位置に適用されている速度。 PositionVelocityInPixelsPerSecond プロパティは、慣性時の InteractionTracker の現在の位置速度を表します。 このプロパティには、2 つの主なユース ケースがあります。相互作用が発生した直後に InteractionTracker の位置速度を取得するか、ExpressionAnimationで InteractionTracker の最新速度を参照します。 |
Properties |
CompositionObjectに関連付けられているプロパティのコレクション。 (継承元 CompositionObject) |
Scale |
InteractionTrackerによって計算される出力スケール。 現在のスケールは、
InteractionTracker の scale プロパティは、InteractionTracker の座標空間のスケールを表す float です。 この値は 1 から始まり、プロパティを更新またはアニメーション化するためのアクティブな入力または直接呼び出しに基づいて増減します。 |
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 に " が含まれます。条件" は true に評価され、トラッカーが使用するズーム CenterPointX 値を "" に置き換えます。値"。 true と評価されない場合、CenterPointX はそのフレームに置き換えされません。 |
ConfigureCenterPointYInertiaModifiers(IIterable<CompositionConditionalValue>) |
CompositionConditionalValue の順序付きリストを取得します。 フレームでは、トラッカーが慣性にある間に、最初の CompositionConditionalValue に " が含まれます。条件" は true に評価され、トラッカーが使用するズーム CenterPointY 値を "" に置き換えます。値"。 true と評価されない場合、CenterPointY はそのフレームに置き換えされません。 |
ConfigurePositionXInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
InteractionTrackerInertiaModifier オブジェクトのコレクションを InteractionTracker の x 慣性に適用します。 ConfigurePositionXInertiaModifiers メソッドは、InteractionTrackerInertiaModifier |
ConfigurePositionYInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
InteractionTrackerInertiaModifier オブジェクトのコレクションを InteractionTracker の y 慣性に適用します。 ConfigurePositionYInertiaModifiers メソッドは、interactionTrackerInertiaModifier |
ConfigureScaleInertiaModifiers(IIterable<InteractionTrackerInertiaModifier>) |
InteractionTrackerInertiaModifier オブジェクトのコレクションを InteractionTracker のスケールに適用します。 ConfigureScaleInertiaModifiers メソッドは、interactionTrackerInertiaModifier |
ConfigureVector2PositionInertiaModifiers(IIterable<InteractionTrackerVector2InertiaModifier>) |
InteractionTrackerInertiaModifier オブジェクトのコレクションを InteractionTracker の位置に適用します。 |
Create(Compositor) |
InteractionTrackerのインスタンスを作成します。 この Create メソッドは、InteractionTrackerをインスタンス化します。 プロパティの設定、 |
CreateWithOwner(Compositor, IInteractionTrackerOwner) |
指定した所有者 InteractionTracker のインスタンスを作成します。 この Create メソッドは、コールバックに登録するための所有者と InteractionTracker をインスタンス化します。 プロパティの設定、 |
Dispose() |
アンマネージド リソースの解放、解放、またはリセットに関連付けられているアプリケーション定義のタスクを実行します。 (継承元 CompositionObject) |
GetBindingMode(InteractionTracker, InteractionTracker) |
2 つの相互作用トラッカー間のバインド軸モードを取得します。 |
PopulatePropertyInfo(String, AnimationPropertyInfo) |
アニメーション化できるプロパティを定義します。 (継承元 CompositionObject) |
SetBindingMode(InteractionTracker, InteractionTracker, InteractionBindingAxisModes) |
2 つの相互作用トラッカー間のバインド軸モードを設定します。 |
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 |
TryUpdatePositionWithAdditionalVelocity(Vector3) |
速度を追加して、InteractionTrackerの位置を更新しようとします。 TryUpdatePositionWithAdditionalVelocity メソッドは、InteractionTrackerの現在の速度に追加の速度を表す入力 Vector3 |
TryUpdatePositionWithAnimation(CompositionAnimation) |
アニメーションを適用して、InteractionTrackerの位置を更新しようとします。 TryUpdatePositionWithAnimation メソッドは、 |
TryUpdateScale(Single, Vector3) |
指定した値にスケールを更新しようとします。 TryUpdateScale メソッドは、InteractionTracker |
TryUpdateScaleWithAdditionalVelocity(Single, Vector3) |
指定した速度を追加してスケールの更新を試みます。 TryUpdateScaleWithAdditionalVelocity メソッドは、InteractionTracker の現在の速度に追加の速度を表す入力されたスカラー |
TryUpdateScaleWithAnimation(CompositionAnimation, Vector3) |
指定したアニメーションでスケールの更新を試みます。 TryUpdateScaleWithAnimation メソッドは、パラメーターとして入力 |