Метод 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

Потенциальное влияние на newStoryboard , если scheduledStoryboard имеет более высокий приоритет.

Возвращаемое значение

Этот метод может возвращать одно из этих значений.

Код возврата Описание
S_OK
NewStoryboard имеет приоритет.
S_FALSE
scheduledStoryboard имеет приоритет.

Комментарии

Одна переменная анимации может быть включена в несколько раскадровки, но несколько раскадровок не могут одновременно анимировать одну и ту же переменную.

Если новая раскадровка пытается анимировать одну или несколько переменных, которые в настоящее время запланированы для анимации с помощью другой раскадровки, возникает конфликт планирования.

Чтобы определить, какая раскадровка имеет приоритет, диспетчер анимации может вызвать HasPriority в одном или нескольких обработчиках сравнения приоритетов, предоставляемых приложением.

Регистрация объектов сравнения приоритетов необязательна. По умолчанию все раскадровки можно обрезать, завершить или сжать, чтобы предотвратить сбой, но ни одна из них не может быть отменена, и по умолчанию раскадровки не будут отменены или обрезаны, чтобы предотвратить задержку.

По умолчанию вызов, выполненный в методе обратного вызова любого другого метода анимации, приводит к сбою вызова и возврату UI_E_ILLEGAL_REENTRANCY. Однако существуют исключения из этого значения по умолчанию. Из HasPriority можно успешно вызвать следующие методы:

Управление состязаниями

Чтобы устранить конфликт планирования, диспетчер анимации имеет следующие параметры:

  • Отмена запланированной раскадровки, если она еще не начала воспроизведение и объект сравнения приоритетов, зарегистрированный в 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. Если параметр 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. В других случаях рекомендуется по возможности завершать запланированные анимации, и в этом случае следует возвращать S_FALSE. UI_ANIMATION_PRIORITY_EFFECT_DELAY передается в HasPriority , только если диспетчер анимации рассматривает возможность отмены или обрезки раскадровки.

Требования

Требование Значение
Минимальная версия клиента Windows 7, Windows Vista и Обновление платформы для Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Ни одна версия не поддерживается
Целевая платформа Windows
Header uianimation.h
DLL UIAnimation.dll

См. также раздел

IUIAnimationManager::SetCancelPriorityComparison

IUIAnimationManager::SetCompressPriorityComparison

IUIAnimationManager::SetConcludePriorityComparison

IUIAnimationManager::SetTrimPriorityComparison

IUIAnimationPriorityComparison

UI_ANIMATION_PRIORITY_EFFECT