IUIAnimationPriorityComparison2::HasPriority 方法 (uianimation.h)
決定排程分鏡腳本與新分鏡腳本之間的相對優先順序。
語法
HRESULT HasPriority(
[in] IUIAnimationStoryboard2 *scheduledStoryboard,
[in] IUIAnimationStoryboard2 *newStoryboard,
[in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);
參數
[in] scheduledStoryboard
目前排程的分鏡腳本。
[in] newStoryboard
中斷 scheduledStoryboard 所指定之排程分鏡腳本的新分鏡腳本。
[in] priorityEffect
如果 scheduledStoryboard 的優先順序較高,則對 newStoryboard 的潛在影響。
傳回值
如果成功,則傳回下列專案;否則為 HRESULT 錯誤碼。 如需錯誤碼的清單,請參閱 Windows 動畫錯誤 碼。
傳回碼 | 描述 |
---|---|
|
newStoryboard 具有優先順序。 |
|
scheduledStoryboard 具有優先順序。 |
備註
單一動畫變數可以包含在多個分鏡腳本中,但多個分鏡腳本無法同時產生相同變數的動畫效果。
如果新的分鏡腳本嘗試以動畫顯示目前由不同分鏡腳本排程動畫的一或多個變數,就會發生排程衝突。
若要判斷哪個分鏡腳本具有優先順序,動畫管理員可以在應用程式提供的一或多個優先順序比較處理程式上呼叫 HasPriority 方法。
註冊優先順序比較對像是選擇性的。 根據預設,所有分鏡腳本都可以修剪、結束或壓縮以防止失敗,但無法取消,而且預設不會取消或修剪腳本,以避免延遲。
根據預設,對任何其他動畫方法的回呼方法進行呼叫會導致呼叫失敗並傳回 UI_E_ILLEGAL_REENTRANCY。 不過,此預設值有例外狀況。 您可以從 HasPriority 成功呼叫下列方法:
- IUIAnimationManager2::GetStoryboardFromTag
- IUIAnimationManager2::GetVariableFromTag
- IUIAnimationStoryboard::GetTag
- IUIAnimationVariable2::GetTag
爭用管理
若要解決排程衝突,動畫管理員有下列選項:
- 如果排程的分鏡腳本尚未開始播放,且已向 IUIAnimationManager2::SetCancelPriorityComparison 註冊的優先順序比較物件會傳回 S_OK。 取消的分鏡腳本會完全從排程中移除。
- 如果已向 IUIAnimationManager2::SetTrimPriorityComparison 註冊的優先順序比較物件傳回 S_OK,請修剪排程的分鏡腳本。 如果新的分鏡腳本修剪排程的分鏡腳本,當新的分鏡腳本開始以動畫顯示該變數時,排定的分鏡腳本就不再影響變數。
- 如果排程的分鏡腳本包含重複計數 為UI_ANIMATION_REPEAT_INDEFINITELY 的迴圈,以及向 IUIAnimationManager2::SetConcludePriorityCompariS_OK son 註冊的優先順序比較物件,則結束排程腳本。 如果腳本已結束,則迴圈目前的重複完成,然後播放腳本的提醒。
- 如果已向 IUIAnimationManager2::SetCompressPriorityComparison 註冊的優先順序比較物件傳回S_OK,則所有可能受到壓縮影響的排程分鏡腳本都會傳回 S_OK 。 壓縮分鏡腳本時,系統會暫時加速受影響的分鏡腳本的時間,讓腳本播放速度更快。
如果優先順序比較對象不允許上述任何選項,則嘗試排程分鏡腳本會失敗,Windows 動畫 會將UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY 傳回給呼叫的應用程式。
請注意,若要成功排程新的分鏡腳本,必須在經過最長可接受的延遲之前開始。 這是由 IUIAnimationStoryboard::SetLongestAcceptableDelay 或 IUIAnimationManager2::SetDefaultLongestAcceptableDelay (如果兩者都未呼叫,則預設值為 0.0 秒) 。 如果最長可接受的延遲 UI_ANIMATION_SECONDS_EVENTUALLY,則任何有限延遲都已足夠。
如果 HasPriority 傳回S_FALSE,priorityEffect 參數會描述新分鏡腳本的可能效果。 如果 priorityEffectUI_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來減少動畫的延遲。 在其他人中,最好盡可能讓排程的動畫完成,在此情況下 ,HasPriority 應該傳回 S_FALSE。 只有在動畫管理員考慮取消或修剪分鏡腳本時,UI_ANIMATION_PRIORITY_EFFECT_DELAY才會傳遞至 HasPriority。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8、適用於 Windows 7 的 Windows 7 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | 都不支援 |
目標平台 | Windows |
標頭 | uianimation.h |
Dll | UIAnimation.dll |
另請參閱
IUIAnimationManager2::SetCancelPriorityComparison
IUIAnimationManager2::SetCompressPriorityComparison
IUIAnimationManager2::SetConcludePriorityComparison
IUIAnimationManager2::SetTrimPriorityComparison