After playing around a lot with the UIView
dynamic animations introduced in iOS 7, most notably:
[UIView animateWithDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion:];
I was wondering if there is an equivalent to 'SpringWithDamping/Velocity' method that can be accessed directly when creating a CALayer
animation? I.e. either through CATransaction
, CABasicAnimation
or otherwise...
Thanks
There is (and have been for a while) a private class called
CASpringAnimation
that I'm pretty sure is being used behind it all (but I haven't verified it). Unfortunately, it is still private.in iOS9 Apple finally made the
CASpringAnimation
class public.You can use it like that:
Notice that you cannot set the animation duration - you need to ask the
CASpringAnimation
class for thesettlingDuration
(e.g. "How much time is going to take for the spring system to settle down") and then set it as the duration of your animation.Check the header files for
CASpringAnimation
- it exposes a number of spring system variables you can adjust - stiffness, mass, etc.As David said,
CASpringAnimation
is private (for now?), but I recently came acrossRBBSpringAnimation
from the RBBAnimation project.I can definitely recommend this, it was very easy to drop in as a replacement for my existing CABasicAnimation.
I wrote a class to create
CASpringAnimation
instance. It works in a pretty simple way:By creating a spring animation from UIKit API, it arrests the created
CASpringAnimation
instance from the view's layer, copies it and returns it.But I don't know if it is App Store safe that to create
CASpringAnimation
in this way.