 
     // MARK: run with animation tasks
 
-    private func _startBefore(context: UIViewControllerContextTransitioning) {
-        before.completion = {
-            self._startPresent(context)
-        }
-
-        before.start()
-    }
-
-    private func _startPresent(context: UIViewControllerContextTransitioning) {
+    func startTransition(context: UIViewControllerContextTransitioning) {
         let fromViewController = context.viewControllerForKey(UITransitionContextFromViewControllerKey)
         let toViewController = context.viewControllerForKey(UITransitionContextToViewControllerKey)
 

    let before = Animator()
    let present = Animator()

    override init()  {
    }

    func start(context: UIViewControllerContextTransitioning) {
        if duration == 0.0 {
            setup(context)
        }
        _startBefore(context)
    }
}

extension Manager: UIViewControllerAnimatedTransitioning {

    func animateTransition(context: UIViewControllerContextTransitioning) {
        start(context)
    }

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval {

        }
        present.start()
    }

    func findViewControllerIn(viewController: UIViewController) -> UIViewController {

        switch viewController {
        case let navigationController as UINavigationController:
            return navigationController.topViewController
        default:
            break
        }

        return viewController
    }
}

public func animate() -> UIViewControllerAnimatedTransitioning? {
