IUIAnimationPriorityComparison::HasPriority メソッド (uianimation.h)
スケジュールされたストーリーボードよりも新しいストーリーボードの優先度を設定するかどうかを指定します。
構文
HRESULT HasPriority(
[in] IUIAnimationStoryboard *scheduledStoryboard,
[in] IUIAnimationStoryboard *newStoryboard,
[in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);
パラメーター
[in] scheduledStoryboard
現在スケジュールされているストーリーボード。
[in] newStoryboard
scheduledStoryboard で指定されたスケジュールされたストーリーボードを中断している新しいストーリーボード。
[in] priorityEffect
scheduledStoryboard の優先度が高い場合の newStoryboard に対する潜在的な影響。
戻り値
このメソッドは、これらの値のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
newStoryboard には優先度があります。 |
|
scheduledStoryboard には優先度があります。 |
注釈
1 つのアニメーション変数を複数のストーリーボードに含めることができますが、複数のストーリーボードで同じ変数を同時にアニメーション化することはできません。
新しいストーリーボードが、別のストーリーボードによって現在アニメーションにスケジュールされている 1 つ以上の変数をアニメーション化しようとすると、スケジュールの競合が発生します。
優先度を持つストーリーボードを判断するために、アニメーション マネージャーは、アプリケーションによって提供される 1 つ以上の優先度比較ハンドラーで HasPriority を呼び出すことができます。
優先度比較オブジェクトの登録は省略可能です。 既定では、すべてのストーリーボードをトリミング、終了、または圧縮して失敗を防ぐことができますが、取り消せるものはなく、既定では、遅延を防ぐためにストーリーボードは取り消されたりトリミングされたりしません。
既定では、コールバック メソッドで他のアニメーション メソッドを呼び出すと、呼び出しが失敗し 、UI_E_ILLEGAL_REENTRANCYが返されます。 ただし、この既定値には例外があります。 HasPriority から次のメソッドを正常に呼び出すことができます。
- IUIAnimationManager::GetStoryboardFromTag
- IUIAnimationManager::GetVariableFromTag
- IUIAnimationStoryboard::GetTag
- IUIAnimationVariable::GetTag
競合管理
スケジュールの競合を解決するために、アニメーション マネージャーには次のオプションがあります。
- 再生が開始されておらず、 IUIAnimationManager::SetCancelPriorityComparison に登録されている優先度比較オブジェクトが S_OKを返す場合は、スケジュールされたストーリーボードをキャンセルします。 キャンセルされたストーリーボードは、スケジュールから完全に削除されます。
- IUIAnimationManager::SetTrimPriorityComparison に登録されている優先度比較オブジェクトがS_OKを返す場合は、スケジュールされたストーリーボードをトリミングします。 新しいストーリーボードがスケジュールされたストーリーボードをトリミングした場合、新しいストーリーボードがその変数のアニメーション化を開始したときに、スケジュールされたストーリーボードは変数に影響を与えなくなります。
- スケジュールされたストーリーボードに UI_ANIMATION_REPEAT_INDEFINITELYの繰 り返し数を持つループが含まれており、 IUIAnimationManager::SetConcludePriorityComparison に登録されている優先度比較オブジェクトが S_OKを返す場合は、スケジュールされたストーリーボードを終了します。 ストーリーボードが終了すると、ループの現在の繰り返しが完了し、ストーリーボードのリマインダーが再生されます。
- IUIAnimationManager::SetCompressPriorityComparison に登録されている優先度比較オブジェクトが、圧縮の影響を受ける可能性のあるすべてのスケジュールされたストーリーボードに対してS_OKを返す場合は、スケジュールされたストーリーボードと、同じ変数をアニメーション化する他のストーリーボードを圧縮します。 ストーリーボードが圧縮されると、影響を受けるストーリーボードの時間が一時的に高速化されるため、再生速度が速くなります。
優先度比較オブジェクトで上記のオプションが許可されていない場合、ストーリーボードをスケジュールしようとすると失敗し、Windows アニメーションは呼び出し元のアプリケーション にUI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY を返します。
新しいストーリーボードを正常にスケジュールするには、許容される最も長い遅延が経過する前に開始する必要があります。 これは 、IUIAnimationStoryboard::SetLongestAcceptableDelay または IUIAnimationManager::SetDefaultLongestAcceptableDelay によって決定されます (どちらも呼び出されていない場合、既定値は 0.0 秒です)。 許容できる最も長い遅延が UI_ANIMATION_SECONDS_EVENTUALLY場合は、有限の遅延で十分です。
priorityEffect パラメーターは、HasPriority がS_FALSEを返す場合に、新しいストーリーボードに対して考えられる影響を示します。 priorityEffect がUI_ANIMATION_PRIORITY_EFFECT_FAILURE場合、S_FALSEを返すと、新しいストーリーボードのスケジュールが失敗する可能性があります (アニメーション マネージャーが別の優先度比較オブジェクトによって異なる方法で競合を解決できる可能性もあります)。 priorityEffect がUI_ANIMATION_PRIORITY_EFFECT_DELAY場合、S_FALSEを返す唯一の欠点は、ストーリーボードが hasPriority がS_OK返されたよりも後で開始される可能性があるということです。
UI_ANIMATION_PRIORITY_EFFECT_DELAYが HasPriority に渡されると、アニメーション マネージャーは、許容される最も長い遅延が経過する前に開始するように新しいストーリーボードをスケジュールできることを既に決定していますが、実際には、ストーリーボードをさらに早く開始する必要があるかどうかをアプリケーションに確認します。 一部のシナリオでは、S_OKを返すことによってアニメーションの待機時間を短縮することをお勧めします。 他のユーザーは、スケジュールされたアニメーションを可能な限り完了させておくことをお勧めします。その場合は、S_FALSEを返す必要があります。 UI_ANIMATION_PRIORITY_EFFECT_DELAY は、アニメーション マネージャーがストーリーボードのキャンセルまたはトリミングを検討している場合にのみ HasPriority に渡されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7、Windows Vista、および Windows Vista 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | サポートなし |
対象プラットフォーム | Windows |
ヘッダー | uianimation.h |
[DLL] | UIAnimation.dll |
こちらもご覧ください
IUIAnimationManager::SetCancelPriorityComparison
IUIAnimationManager::SetCompressPriorityComparison
IUIAnimationManager::SetConcludePriorityComparison
IUIAnimationManager::SetTrimPriorityComparison