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 具有優先權。 |
備註
單一動畫變數可以包含在多個分鏡腳本中,但多個分鏡腳本無法同時以動畫顯示相同的變數。
如果新的分鏡腳本嘗試以動畫顯示目前由不同分鏡腳本排程動畫的一或多個變數,就會發生排程衝突。
若要判斷哪個分鏡腳本具有優先權,動畫管理員可以在應用程式提供的一或多個優先順序比較處理程式上呼叫 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最長可接受的延遲,則任何有限延遲都將足夠。
如果 HasPriority 傳回S_FALSE,priorityEffect 參數會描述新分鏡腳本的可能效果。 如果 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 Vista 的 Windows 7、Windows Vista 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | 都不支援 |
目標平台 | Windows |
標頭 | uianimation.h |
Dll | UIAnimation.dll |
另請參閱
IUIAnimationManager::SetCancelPriorityComparison
IUIAnimationManager::SetCompressPriorityComparison
IUIAnimationManager::SetConcludePriorityComparison
IUIAnimationManager::SetTrimPriorityComparison