
Yapanimator es su sistema de animación rápido y amigable basado en la física. Yapanimator fue construido teniendo en cuenta la facilidad de uso, manteniéndolo cuerdo y su diseñador muy, muy feliz. Todas las animaciones son interrumpibles, incluyen bloques de finalización y le permiten aplicar las fuerzas (por ejemplo, agregar la velocidad de un gesto en una transición). Hemos incluido la conformidad de protocolo Animatable para algunos tipos comúnmente animados (tipos de CG ), pero es realmente fácil agregar conformidad a cualquier otro tipo. Puede animar cualquier cosa que pueda representar y componer con una variedad de Double S: ver las propiedades, volumen musical, transformación entre rutas Bezier, colores, trazos de pincel suaves, la lista continúa ... ¡Usa tu imaginación!
Debido a que es increíblemente fácil de usar y hace hermosas animaciones, por eso. Existen otros sistemas de animación basados en la física (por ejemplo, las animaciones de primavera de Uikit, el pop de Facebook), pero aún requieren escribir demasiado código, contabilidad y mantener la mano para nuestro gusto. Yapanimator representa una iteración de código N-th destilada que hemos estado usando en nuestras propias aplicaciones durante años. Lo encontramos invaluable en nuestro día a día y pensamos que usted también lo hará.
Yapanimator viene con una práctica extensión atornillada a CALayer y UIView / NSView , proporcionando animaciones de una línea bajo las propiedades animatedLayer y 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 )
}
} Crear un animador personalizado es sencillo:
initialValue Esto establece el valor inicial del animador y le informa qué tipo estará animando.willBegin llamó justo antes de que comience el movimiento. Devuelva el valor real de la propiedad que animará. Esto permite que el animador se sincronice con ese valor en caso de que se haya cambiado fuera del alcance del animador. (opcional)eachFrame llamó a cada cuadro de la animación: esto es típicamente donde aplicaría el current.value del animador a la propiedad que está animando. También puede usarlo para verificar los valores para activar otras acciones / animaciones. 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 ) )
}
} ) No dude en hacer su pregunta en un problema. Responderemos allí y enmendaremos esto lea/comenzaremos una wiki si la respuesta parece que beneficiaría a otros.
Yapanimator es propiedad y mantiene el YAP Studios.