Compartilhar via


Método IUIAnimationPriorityComparison2::HasPriority (uianimation.h)

Determina a prioridade relativa entre um storyboard agendado e um novo storyboard.

Sintaxe

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

Parâmetros

[in] scheduledStoryboard

O storyboard agendado no momento.

[in] newStoryboard

O novo storyboard que está interrompendo o storyboard agendado especificado por scheduledStoryboard.

[in] priorityEffect

O efeito potencial no newStoryboard se scheduledStoryboard tiver uma prioridade mais alta.

Retornar valor

Retorna o seguinte se tiver êxito; caso contrário, um código de erro HRESULT . Consulte Códigos de erro de animação do Windows para obter uma lista de códigos de erro.

Código de retorno Descrição
S_OK
newStoryboard tem prioridade.
S_FALSE
scheduledStoryboard tem prioridade.

Comentários

Uma única variável de animação pode ser incluída em vários storyboards, mas vários storyboards não podem animar a mesma variável ao mesmo tempo.

Se um novo storyboard tentar animar uma ou mais variáveis agendadas atualmente para animação por um storyboard diferente, ocorrerá um conflito de agendamento.

Para determinar qual storyboard tem prioridade, o gerenciador de animação pode chamar o método HasPriority em um ou mais manipuladores de comparação de prioridade fornecidos pelo aplicativo.

O registro de objetos de comparação de prioridade é opcional. Por padrão, todos os storyboards podem ser cortados, concluídos ou compactados para evitar falhas, mas nenhum pode ser cancelado e, por padrão, nenhum storyboard será cancelado ou cortado para evitar um atraso.

Por padrão, uma chamada feita em um método de retorno de chamada para qualquer outro método de animação resulta na falha da chamada e no retorno de UI_E_ILLEGAL_REENTRANCY. No entanto, há exceções a esse padrão. Os métodos a seguir podem ser chamados com êxito de HasPriority:

Gerenciamento de contenção

Para resolve um conflito de agendamento, o gerenciador de animação tem as seguintes opções:

  • Cancele o storyboard agendado se ele não tiver começado a ser reproduzido e o objeto de comparação de prioridade registrado com IUIAnimationManager2::SetCancelPriorityComparisonretornará S_OK. Os storyboards cancelados são completamente removidos do agendamento.
  • Corte o storyboard agendado se o objeto de comparação de prioridade registrado com IUIAnimationManager2::SetTrimPriorityComparison retornar S_OK. Se o novo storyboard cortar o storyboard agendado, o storyboard agendado não poderá mais afetar uma variável quando o novo storyboard começar a animar essa variável.
  • Conclua o storyboard agendado se o storyboard agendado contiver um loop com uma contagem de repetição de UI_ANIMATION_REPEAT_INDEFINITELY e o objeto de comparação de prioridade registrado com IUIAnimationManager2::SetConcludePriorityComparisonretornará S_OK. Se o storyboard for concluído, a repetição atual do loop será concluída e o lembrete do storyboard será reproduzido.
  • Compacte o storyboard agendado e quaisquer outros storyboards que animem as mesmas variáveis, se o objeto de comparação de prioridade registrado com IUIAnimationManager2::SetCompressPriorityComparison retornar S_OK para todos os storyboards agendados que podem ser afetados pela compactação. Quando os storyboards são compactados, o tempo é temporariamente acelerado para storyboards afetados, para que eles sejam reproduzidos mais rapidamente.

Se nenhuma das opções anteriores for permitida pelos objetos de comparação de prioridade, a tentativa de agendar o storyboard falhará e a Animação do Windows retornará UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY ao aplicativo de chamada.

Observe que, para que o novo storyboard seja agendado com êxito, ele deve começar antes que seu maior atraso aceitável tenha decorrido. Isso é determinado por IUIAnimationStoryboard::SetLongestAcceptableDelay ou IUIAnimationManager2::SetDefaultLongestAcceptableDelay (se nenhum for chamado, o padrão será 0,0 segundos). Se o atraso aceitável mais longo for UI_ANIMATION_SECONDS_EVENTUALLY, qualquer atraso finito será suficiente.

O parâmetro priorityEffect descreve o possível efeito no novo storyboard se HasPriority retornar S_FALSE. Se priorityEffect for UI_ANIMATION_PRIORITY_EFFECT_FAILURE, é possível que retornar S_FALSE resultará em uma falha ao agendar o novo storyboard. (Também é possível que o gerenciador de animação tenha permissão para resolve o conflito de uma maneira diferente por outro objeto de comparação de prioridade.) Se priorityEffect for UI_ANIMATION_PRIORITY_EFFECT_DELAY, a única desvantagem de retornar S_FALSE é que o storyboard poderia começar mais tarde do que teria se HasPriority tivesse retornado S_OK.

Quando UI_ANIMATION_PRIORITY_EFFECT_DELAY é passado para HasPriority, o gerenciador de animação já determinou que pode agendar o novo storyboard para começar antes que seu maior atraso aceitável tenha decorrido, mas, na verdade, está perguntando ao aplicativo se o storyboard deve começar ainda mais cedo. Em alguns cenários, talvez seja melhor reduzir a latência de uma animação retornando S_OK. Em outros, pode ser preferível permitir que animações agendadas sejam concluídas sempre que possível, nesse caso, HasPriority deve retornar S_FALSE. UI_ANIMATION_PRIORITY_EFFECT_DELAY só é passado para HasPriority quando o gerenciador de animação está considerando cancelar ou cortar um storyboard.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8, Windows 7 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Nenhum compatível
Plataforma de Destino Windows
Cabeçalho uianimation.h
DLL UIAnimation.dll

Confira também

IUIAnimationManager2::SetCancelPriorityComparison

IUIAnimationManager2::SetCompressPriorityComparison

IUIAnimationManager2::SetConcludePriorityComparison

IUIAnimationManager2::SetTrimPriorityComparison

IUIAnimationPriorityComparison2

UI_ANIMATION_PRIORITY_EFFECT