     open var status: Status = .idle {
         didSet {
             if oldValue != status {
-                updateStatus()
+                statusTransition(from: oldValue, to: status)
             }
         }
     }

        if let previousBounds = previousBounds, previousBounds.equalTo(bounds) {
            return
        }

        updateStatus()
        previousBounds = bounds

        for i in 0 ..< 3 {
            let circleLayer = circleLayers[i]
            circleLayer.opacity = opacity
            circleLayer.path = NSBezierPath(ovalIn: bounds).cgPath
            circleLayer.transform = CATransform3DMakeRotation(CGFloat(i) / 3 * CGFloat(M_PI) * 2, 0, 0, 1)
            circleLayer.removeAnimation(forKey: "rotatingAnimation")
        }
    }
    
    fileprivate func updateStatus() {
        switch status {
        case .idle:
