EasyAnimation

:  ~ 45 sec read

This makes usage of UIView.animateWithDuration:animations so much more appealing. Some examples from the repo's readme:

// Also works with spring animations:
UIView.animateWithDuration(2.0, delay: 2.0, 
  options: .Repeat | .Autoreverse | .CurveEaseOut, 
  animations: {
    self.view.layer.position.x += 200.0
    self.view.layer.cornerRadius = 20.0
    self.view.layer.borderWidth = 5.0
}, completion: nil)
  
// Also works with chains!
UIView.animateAndChainWithDuration(1.0, delay: 0.0, 
  options: nil, animations: {
    self.view.center.y += 100
}, completion: nil).animateWithDuration(1.0, animations: {
  self.view.center.x += 100
}).animateWithDuration(1.0, animations: {
  self.view.center.y -= 100
}).animateWithDuration(1.0, animations: {
  self.view.center.x -= 100
})

// A nice addition is canceling chains:
let chain = UIView.animateAndChainWithDuration(1.0, delay: 0.0,
  options: nil, animations: {
    self.square.center.y += 100
}, completion: nil).animateWithDuration(1.0, animations: { ... }
[...]
// Will stop after finishing the current step in the chain.
chain.cancelAnimationChain()

Install via cocoaPods with pod 'EasyAnimation'.