
O Yapanimator é seu sistema de animação rápido e amigável baseado em física. O Yapanimator foi construído com facilidade de uso em mente, mantendo você são e seu designer muito, muito feliz. Todas as animações são interrompidas, incluem blocos de conclusão e permitem que você aplique forças a elas (por exemplo, adicionando a velocidade de um gesto em uma transição). Incluímos a conformidade do protocolo Animatable para alguns tipos de animação (tipos CG ), mas é realmente fácil adicionar conformidade a qualquer outro tipo. Você pode animar qualquer coisa que possa representar e compor com uma variedade de propriedades Double - veja as propriedades, volume de música, transformando -se entre caminhos de Bezier, cores, pinceladas de suavização, a lista continua ... use sua imaginação!
Porque é incrivelmente fácil de usar e faz belas animações, é por isso. Existem outros sistemas de animação baseados em física por aí (por exemplo, as animações da primavera da Uikit, o pop do Facebook), mas eles ainda exigem escrever muito código, contabilidade e retenção manual para o nosso gosto. O Yapanimator representa uma iteração de código N-TH destilada que usamos em nossos próprios aplicativos há anos. Achamos inestimável no dia-a-dia e pensamos que você também.
O Yapanimator vem com uma extensão útil para CALayer e UIView / NSView , fornecendo animações de uma linha sob o animatedLayer e as propriedades animated , respectivamente.

func handle ( gesture : UIPanGestureRecognizer ) {
if gesture . state == . began {
squircle . animated . cornerRadius . animate ( to : squircle . bounds . width / 2.0 )
squircle . animated . rotationZ . animate ( to : . pi )
else if gesture . state == . changed {
squircle . animated . position . instant ( to : gesture . location ( in : nil ) )
} else if gesture . state == . ended {
squircle . animated . position . animate ( to : self . view . center )
squircle . animated . cornerRadius . animate ( to : 0 )
squircle . animated . rotationZ . animate ( to : 0 )
}
} Criar um animador personalizado é simples:
initialValue Isso define o valor inicial do animador e informa que tipo ele estará animando.willBegin ligou pouco antes do início do movimento. Retorne o valor real da propriedade que você estará animando. Isso permite que o animador sincronize com esse valor, caso tenha sido alterado fora do escopo do animador. (opcional)eachFrame chamado cada quadro da animação - é normalmente onde você aplica o current.value do animador à propriedade que você está animando. Você também pode usá -lo para verificar valores para acionar outras ações / animações. frameAnimator = YapAnimator ( initialValue : square . frame , willBegin : { [ unowned self ] in
return self . square . frame
} , eachFrame : { [ unowned self ] ( animator ) in
self . square . frame = animator . current . value
} ) 
frameAnimator . bounciness = 1.5
frameAnimator . animate ( to : square . frame . insetBy ( dx : - 50 , dy : - 50 ) , completion : { animator , wasInterrupted in
if !wasInterrupted {
// animate back to the original value
animator . animate ( to : animator . current . value . insetBy ( dx : 50 , dy : 50 ) )
}
} ) Sinta -se à vontade para fazer sua pergunta em um problema. Responderemos lá e alteraremos isso me ler/iniciar um wiki se a resposta parecer que beneficiaria outros.
O Yapanimator é de propriedade e mantido pela YAP Studios.