Метод 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
Потенциальное влияние на newStoryboard , если scheduledStoryboard имеет более высокий приоритет.
Возвращаемое значение
В случае успешного выполнения возвращает следующее: в противном случае — код ошибки 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::SetConcludePriorityComparison возвращает S_OK. Если раскадровка завершена, текущее повторение цикла завершается, и напоминание о раскадровке затем воспроизводится.
- Сожмите запланированную раскадровку и любые другие раскадровки, анимирующие те же переменные, если объект сравнения приоритета, зарегистрированный в IUIAnimationManager2::SetCompressPriorityComparison , возвращает S_OK для всех запланированных раскадровки, на которые может повлиять сжатие. При сжатии раскадровки время временно ускоряется для затронутых раскадровки, чтобы они играли быстрее.
Если ни один из предыдущих вариантов не разрешен объектами сравнения приоритетов, попытка запланировать раскадровку завершается сбоем и анимация Windows возвращает UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY вызывающему приложению.
Обратите внимание, что для успешного планирования новой раскадровки она должна начинаться до истечения самой длительной допустимой задержки. Это определяется IUIAnimationStoryboard::SetLongestAcceptableDelay или IUIAnimationManager2::SetDefaultLongestAcceptableDelay (если ни то, ни иное не вызывается, значение по умолчанию — 0,0 секунды). Если самая длинная допустимая задержка UI_ANIMATION_SECONDS_EVENTUALLY, то любой конечной задержки будет достаточно.
Параметр priorityEffect описывает возможное влияние на новую раскадровку, если HasPriority будет возвращать S_FALSE. Если параметр priorityEffectUI_ANIMATION_PRIORITY_EFFECT_FAILURE, возможно, возврат S_FALSE приведет к сбою при планировании новой раскадровки. (Также возможно, что диспетчеру анимации будет разрешено разрешить конфликт другим способом с помощью другого объекта сравнения приоритета.) Если параметр priorityEffectUI_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 |
Header | uianimation.h |
DLL | UIAnimation.dll |
См. также раздел
IUIAnimationManager2::SetCancelPriorityComparison
IUIAnimationManager2::SetCompressPriorityComparison
IUIAnimationManager2::SetConcludePriorityComparison
IUIAnimationManager2::SetTrimPriorityComparison