Partager via


IUIAnimationPriorityComparison2 ::HasPriority, méthode (uianimation.h)

Détermine la priorité relative entre un storyboard planifié et un nouveau storyboard.

Syntaxe

HRESULT HasPriority(
  [in] IUIAnimationStoryboard2      *scheduledStoryboard,
  [in] IUIAnimationStoryboard2      *newStoryboard,
  [in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);

Paramètres

[in] scheduledStoryboard

Storyboard actuellement planifié.

[in] newStoryboard

Nouveau storyboard qui interrompt le storyboard planifié spécifié par scheduledStoryboard.

[in] priorityEffect

Effet potentiel sur newStoryboard si scheduledStoryboard a une priorité plus élevée.

Valeur retournée

Retourne ce qui suit en cas de réussite : sinon, un code d’erreur HRESULT . Pour obtenir la liste des codes d’erreur, consultez Codes d’erreur d’animation Windows .

Code de retour Description
S_OK
newStoryboard a la priorité.
S_FALSE
scheduledStoryboard a la priorité.

Remarques

Une seule variable d’animation peut être incluse dans plusieurs storyboards, mais plusieurs storyboards ne peuvent pas animer la même variable en même temps.

Si un nouveau storyboard tente d’animer une ou plusieurs variables actuellement planifiées pour l’animation par un autre storyboard, un conflit de planification se produit.

Pour déterminer quelle table de montage séquentiel a la priorité, le gestionnaire d’animation peut appeler la méthode HasPriority sur un ou plusieurs gestionnaires de comparaison de priorité fournis par l’application.

L’inscription d’objets de comparaison de priorité est facultative. Par défaut, tous les storyboards peuvent être supprimés, terminés ou compressés pour éviter l’échec, mais aucun ne peut être annulé et, par défaut, aucun storyboard ne sera annulé ou supprimé pour éviter un retard.

Par défaut, un appel effectué dans une méthode de rappel à une autre méthode d’animation entraîne l’échec de l’appel et le retour de UI_E_ILLEGAL_REENTRANCY. Toutefois, il existe des exceptions à cette valeur par défaut. Les méthodes suivantes peuvent être appelées avec succès à partir de HasPriority :

Gestion des conflits

Pour résoudre un conflit de planification, le gestionnaire d’animations dispose des options suivantes :

  • Annulez le storyboard planifié s’il n’a pas commencé à jouer et l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager2 ::SetCancelPriorityComparison retourne S_OK. Les storyboards annulés sont complètement supprimés de la planification.
  • Supprimez le storyboard planifié si l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager2 ::SetTrimPriorityComparison retourne S_OK. Si le nouveau storyboard supprime le storyboard planifié, le storyboard planifié ne peut plus affecter une variable lorsque le nouveau storyboard commence à animer cette variable.
  • Terminez le storyboard planifié si le storyboard planifié contient une boucle avec un nombre de répétitions de UI_ANIMATION_REPEAT_INDEFINITELY et que l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager2 ::SetConcludePriorityComparison retourne S_OK. Si le storyboard est terminé, la répétition actuelle de la boucle se termine et le rappel du storyboard est lu.
  • Compressez le storyboard planifié et tous les autres storyboards animant les mêmes variables si l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager2 ::SetCompressPriorityComparison retourne S_OK pour tous les storyboards planifiés susceptibles d’être affectés par la compression. Lorsque les storyboards sont compressés, le temps est temporairement accéléré pour les storyboards affectés, afin qu’ils soient plus rapides.

Si aucune des options précédentes n’est autorisée par les objets de comparaison de priorité, la tentative de planification du storyboard échoue et l’animation Windows retourne UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY à l’application appelante.

Notez que pour que le nouveau storyboard soit correctement planifié, il doit commencer avant l’expiration de son délai acceptable le plus long. Cela est déterminé par IUIAnimationStoryboard ::SetLongestAcceptableDelay ou IUIAnimationManager2 ::SetDefaultLongestAcceptableDelay (si aucun des deux n’est appelé, la valeur par défaut est 0,0 seconde). Si le délai acceptable le plus long est UI_ANIMATION_SECONDS_EVENTUALLY, tout délai fini sera suffisant.

Le paramètre priorityEffect décrit l’effet possible sur le nouveau storyboard si HasPriority devait retourner S_FALSE. Si priorityEffect est UI_ANIMATION_PRIORITY_EFFECT_FAILURE, il est possible que le retour de S_FALSE entraîne un échec de planification du nouveau storyboard. (Il est également possible que le gestionnaire d’animations soit autorisé à résoudre le conflit d’une autre manière par un autre objet de comparaison de priorité.) Si priorityEffect est UI_ANIMATION_PRIORITY_EFFECT_DELAY, le seul inconvénient de retourner S_FALSE est que le storyboard peut commencer plus tard qu’il ne l’aurait fait si HasPriority avait retourné S_OK.

Lorsque UI_ANIMATION_PRIORITY_EFFECT_DELAY est passé à HasPriority, le gestionnaire d’animation a déjà déterminé qu’il peut planifier le démarrage du nouveau storyboard avant que son délai acceptable le plus long ne soit écoulé, mais il demande à l’application si le storyboard doit commencer encore plus tôt. Dans certains scénarios, il peut être préférable de réduire la latence d’une animation en retournant S_OK. Dans d’autres cas, il peut être préférable de laisser les animations planifiées se terminer chaque fois que possible, auquel cas HasPriority doit retourner S_FALSE. UI_ANIMATION_PRIORITY_EFFECT_DELAY est transmis à HasPriority uniquement lorsque le gestionnaire d’animations envisage d’annuler ou de supprimer un storyboard.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8, Windows 7 et Platform Update pour Windows 7 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Aucun pris en charge
Plateforme cible Windows
En-tête uianimation.h
DLL UIAnimation.dll

Voir aussi

IUIAnimationManager2 ::SetCancelPriorityComparison

IUIAnimationManager2 ::SetCompressPriorityComparison

IUIAnimationManager2 ::SetConcludePriorityComparison

IUIAnimationManager2 ::SetTrimPriorityComparison

IUIAnimationPriorityComparison2

UI_ANIMATION_PRIORITY_EFFECT