Método IUIAnimationPriorityComparison::HasPriority (uianimation.h)
Determina se um novo storyboard tem prioridade sobre um storyboard agendado.
Sintaxe
HRESULT HasPriority(
[in] IUIAnimationStoryboard *scheduledStoryboard,
[in] IUIAnimationStoryboard *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 em scheduledStoryboard.
[in] priorityEffect
O efeito potencial no newStoryboard se scheduledStoryboard tiver uma prioridade mais alta.
Retornar valor
Esse método pode retornar um desses valores.
Código de retorno | Descrição |
---|---|
|
newStoryboard tem prioridade. |
|
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 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:
- IUIAnimationManager::GetStoryboardFromTag
- IUIAnimationManager::GetVariableFromTag
- IUIAnimationStoryboard::GetTag
- IUIAnimationVariable::GetTag
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 IUIAnimationManager::SetCancelPriorityComparison retornar 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 IUIAnimationManager::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 IUIAnimationManager::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 animando as mesmas variáveis, se o objeto de comparação de prioridade registrado com IUIAnimationManager::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 acima 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 IUIAnimationManager::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 retornado HasPriority S_OK.
Quando UI_ANIMATION_PRIORITY_EFFECT_DELAY é passado para HasPriority, o gerenciador de animação já determinou que pode agendar o novo storyboard de modo que ele comece 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, S_FALSE deve ser retornado. 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 7, Windows Vista e Platform Update para Windows Vista [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
IUIAnimationManager::SetCancelPriorityComparison
IUIAnimationManager::SetCompressPriorityComparison
IUIAnimationManager::SetConcludePriorityComparison
IUIAnimationManager::SetTrimPriorityComparison