Metodo IUIAnimationPriorityComparison2::HasPriority (uianimation.h)
Determina la priorità relativa tra uno storyboard pianificato e un nuovo storyboard.
Sintassi
HRESULT HasPriority(
[in] IUIAnimationStoryboard2 *scheduledStoryboard,
[in] IUIAnimationStoryboard2 *newStoryboard,
[in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);
Parametri
[in] scheduledStoryboard
Storyboard attualmente pianificato.
[in] newStoryboard
Nuovo storyboard che interrompe lo storyboard pianificato specificato da scheduledStoryboard.
[in] priorityEffect
L'effetto potenziale su newStoryboard se scheduledStoryboard ha una priorità più alta.
Valore restituito
Restituisce quanto segue se l'operazione riesce; in caso contrario, un codice di errore HRESULT . Per un elenco di codici di errore, vedere Codici di errore di animazione di Windows .
Codice restituito | Descrizione |
---|---|
|
newStoryboard ha priorità. |
|
scheduledStoryboard ha priorità. |
Commenti
Una singola variabile di animazione può essere inclusa in più storyboard, ma più storyboard non possono animare contemporaneamente la stessa variabile.
Se un nuovo storyboard tenta di animare una o più variabili attualmente pianificate per l'animazione da uno storyboard diverso, si verifica un conflitto di pianificazione.
Per determinare quale storyboard ha priorità, lo strumento di gestione animazioni può chiamare il metodo HasPriority su uno o più gestori di confronto con priorità forniti dall'applicazione.
La registrazione degli oggetti di confronto con priorità è facoltativa. Per impostazione predefinita, è possibile tagliare, concludere o comprimere tutti gli storyboard per evitare errori, ma nessuno può essere annullato e per impostazione predefinita nessun storyboard verrà annullato o tagliato per evitare un ritardo.
Per impostazione predefinita, una chiamata effettuata in un metodo di callback a qualsiasi altro metodo di animazione genera l'esito negativo della chiamata e restituisce UI_E_ILLEGAL_REENTRANCY. Tuttavia, esistono eccezioni a questo valore predefinito. I metodi seguenti possono essere chiamati correttamente da HasPriority:
- IUIAnimationManager2::GetStoryboardFromTag
- IUIAnimationManager2::GetVariableFromTag
- IUIAnimationStoryboard::GetTag
- IUIAnimationVariable2::GetTag
Gestione dei conflitti
Per risolvere un conflitto di pianificazione, la gestione animazioni ha le opzioni seguenti:
- Annullare lo storyboard pianificato se non è stato avviato la riproduzione e l'oggetto di confronto priorità registrato con IUIAnimationManager2::SetCancelPriorityComparison restituisce S_OK. Gli storyboard annullati vengono completamente rimossi dalla pianificazione.
- Tagliare lo storyboard pianificato se l'oggetto di confronto priorità registrato con IUIAnimationManager2::SetTrimPriorityComparison restituisce S_OK. Se il nuovo storyboard taglia lo storyboard pianificato, lo storyboard pianificato non può più influire su una variabile quando il nuovo storyboard inizia ad animare tale variabile.
- Concludere lo storyboard pianificato se lo storyboard pianificato contiene un ciclo con un numero di ripetizioni di UI_ANIMATION_REPEAT_INDEFINITELY e l'oggetto di confronto priorità registrato con IUIAnimationManager2::SetConcludePriorityComparison restituisce S_OK. Se lo storyboard viene concluso, la ripetizione corrente del ciclo viene completata e il promemoria dello storyboard viene riprodotto.
- Comprimere lo storyboard pianificato e qualsiasi altro storyboard che anima le stesse variabili, se l'oggetto di confronto priorità registrato con IUIAnimationManager2::SetCompressPriorityComparison restituisce S_OK per tutti gli storyboard pianificati che potrebbero essere interessati dalla compressione. Quando gli storyboard vengono compressi, il tempo viene temporaneamente accelerato per gli storyboard interessati, in modo che vengano riprodotti più velocemente.
Se nessuna delle opzioni precedenti è consentita dagli oggetti di confronto prioritari, il tentativo di pianificare lo storyboard ha esito negativo e l'animazione di Windows restituisce UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY all'applicazione chiamante.
Si noti che per pianificare correttamente il nuovo storyboard, deve iniziare prima che sia trascorso il ritardo accettabile più lungo. Ciò è determinato da IUIAnimationStoryboard::SetLongestAcceptableDelay o IUIAnimationManager2::SetDefaultLongestAcceptableDelay (se non viene chiamato nessuno dei due, il valore predefinito è 0,0 secondi). Se il ritardo accettabile più lungo è UI_ANIMATION_SECONDS_EVENTUALLY, qualsiasi ritardo finito sarà sufficiente.
Il parametro priorityEffect descrive l'effetto possibile sul nuovo storyboard se HasPriority dovesse restituire S_FALSE. Se priorityEffect è UI_ANIMATION_PRIORITY_EFFECT_FAILURE, è possibile che la restituzione di S_FALSE provocherà un errore nella pianificazione del nuovo storyboard. È anche possibile che la gestione animazione possa risolvere il conflitto in modo diverso da un altro oggetto di confronto prioritario. Se priorityEffect è UI_ANIMATION_PRIORITY_EFFECT_DELAY, l'unico aspetto negativo della restituzione di S_FALSE è che lo storyboard potrebbe iniziare più tardi di quanto avrebbe dovuto se HasPriority avesse restituito S_OK.
Quando UI_ANIMATION_PRIORITY_EFFECT_DELAY viene passato a HasPriority, lo strumento di gestione animazioni ha già determinato che può pianificare il nuovo storyboard per iniziare prima che sia trascorso il ritardo accettabile più lungo, ma è in effetti chiedere all'applicazione se lo storyboard deve iniziare anche in precedenza. In alcuni scenari potrebbe essere preferibile ridurre la latenza di un'animazione restituendo S_OK. In altri casi, potrebbe essere preferibile lasciare che le animazioni pianificate vengano completate quando possibile, nel qual caso HasPriority deve restituire S_FALSE. UI_ANIMATION_PRIORITY_EFFECT_DELAY viene passato a HasPriority solo quando il gestore di animazioni sta valutando l'annullamento o il taglio di uno storyboard.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8, Windows 7 e Aggiornamento della piattaforma per Windows 7 [app desktop | App UWP] |
Server minimo supportato | Nessuno supportato |
Piattaforma di destinazione | Windows |
Intestazione | uianimation.h |
DLL | UIAnimation.dll |
Vedi anche
IUIAnimationManager2::SetCancelPriorityComparison
IUIAnimationManager2::SetCompressPriorityComparison
IUIAnimationManager2::SetConcludePriorityComparison
IUIAnimationManager2::SetTrimPriorityComparison