Como posso acionar o Core Animation em um proxy animador durante uma chamada para resizeSubviewsWithOldSize?
-
02-07-2019 - |
Pergunta
Tenho alguns NSViews que estou colocando em um dos dois layouts dependendo do tamanho da minha janela.
Estou ajustando o layout quando a supervisão relevante recebe o método resizeSubviewsWithOldSize.
Isso funciona, mas gostaria de animar a mudança.Então, naturalmente, tentei chamar o proxy do animador ao definir os novos quadros, mas a animação não será executada enquanto o usuário ainda estiver arrastando.Se eu soltar o mouse antes da programação da animação, posso ver o final da animação, mas nada até então.Tentei garantir que kCATransactionDisableActions estivesse definido como NÃO, mas isso não ajudou.
É possível iniciar uma nova animação e executá-la durante o redimensionamento?
Solução
Eu não acho que você possa fazer isso facilmente, porque as animações da CA são executadas por meio de um cronômetro e o temporizador não dispara durante os modos Runloop que estão ativos enquanto o usuário está arrastando.
Se você pode controlar o Runloop enquanto o usuário está arrastando, brinque com os modos Runloop. Isso vai fazer funcionar. Eu não acho que você possa mudar isso no lado da CA.
Outras dicas
Isso realmente não é uma resposta, mas desaconselho animar qualquer coisa enquanto arrasta para redimensionar uma janela.A tela já está sendo animada (a partir da janela em movimento) - outras animações provavelmente serão visualmente confusas e estranhas.
Os efeitos CoreAnimation são melhor usados para passar de um estado conhecido para outro - por exemplo, quando uma janela de preferências é redimensionada para acompanhar o conteúdo de um novo painel e você conhece os tamanhos antigo e novo, ou quando está aumentando ou diminuindo gradualmente um objeto (ou ambos).Fazer animação enquanto a janela está sendo redimensionada será visualmente confuso e tornará mais difícil para o usuário se concentrar em obter o tamanho da janela onde deseja.