title: Swift, when Core Animation finished
body: <p>I currently have a Swift application that changes the fill colour of a square from red to green. What I would like to happen is, when the animation has finished, I would then like to execute some more code.</p>
  
  <p>Here is my file:</p>
  
  <pre><code>import UIKit
  
  class PathViewController: TapToCloseViewController {
  
      override func viewDidAppear(animated: Bool) {
          super.viewDidAppear(animated)
  
          let tempView = UIView(frame: CGRectMake(0,0,100,100))
          tempView.layer.borderColor = UIColor.blackColor().CGColor
          tempView.layer.borderWidth = 2
          view.addSubview(tempView)
  
          let bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
  
          // Create CAShapeLayerS
          let rectShape = CAShapeLayer()
          rectShape.bounds = bounds
          rectShape.position = tempView.center
          rectShape.cornerRadius = bounds.width / 2
          tempView.layer.addSublayer(rectShape)
          tempView.backgroundColor = UIColor.redColor()
  
          // Apply effects here
  
          // fill with white
          rectShape.fillColor = UIColor.greenColor().CGColor
  
          // 1
          // begin with a circle with a 50 points radius
          //let startShape = UIBezierPath(roundedRect: bounds, cornerRadius: 50).CGPath
          let sRect = CGRect(x:0, y:0, width: 0, height: bounds.height)
          let bpath = UIBezierPath(rect: sRect).CGPath
  
          // animation end with a large circle with 500 points radius
          let drect = CGRect(x:0, y:0, width: bounds.width, height: bounds.height)
          let endShape = UIBezierPath(rect: drect).CGPath
  
          //let endShape = UIBezierPath(roundedRect: CGRect(x: -450, y: -450, width: 1000, height: 1000), cornerRadius: 500).CGPath
  
          // set initial shape
          rectShape.path = bpath
  
          // 2
          // animate the `path`
          let animation = CABasicAnimation(keyPath: "path")
          animation.toValue = endShape
          animation.duration = 1 // duration is 1 sec
          // 3
          animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) // animation curve is Ease Out 
          animation.fillMode = kCAFillModeBoth // keep to value after finishing
          animation.removedOnCompletion = false // don't remove after finishing
          // 4 
          rectShape.addAnimation(animation, forKey: animation.keyPath)
  
      }
  
  }
  </code></pre>
  
  <p>How would I detect when the animation stopped?</p>