Preciso animar manualmente algo quadro a quadro no SwiftUI usando CADisplayLink
, o que me fornece atualizações quadro a quadro. Para animar um valor de a
to b
de forma linear, a implementação é trivial, basta calcular uma taxa de mudança (b-a) / duration
e aplicar esse delta ao valor em cada quadro.
No entanto, não estou encontrando nenhuma informação sobre como fazer atualizações quadro a quadro quando a animação não é linear . Posso, é claro, criar as funções de atenuação sozinho usando, por exemplo, o pacote numérico , mas parece um caso de uso muito comum para precisar de tanta implementação manual.
Onde estão as funções de flexibilização prontas para uso da Apple? Deveria haver um pacote de funções de easing que me permita recuperar y
usando x
, mas este post sugere que não há nenhum?
Se você puder usar SwiftUI e tiver uma versão mínima de implantação do iOS 17, poderá usar UnitCurve .
Você pode passar um progresso, que é a porcentagem da animação decorrida, e então obter um novo valor de progresso para usar ao calcular o estado atual do valor que está sendo animado.
Se você precisar de outras curvas de animação, https://easings.net/ é uma boa referência para curvas comumente usadas. Também inclui a matemática para produzir a curva na parte inferior de cada página.