         self.beginTime = CACurrentMediaTime() - v
     }
     
+    /**
+     Complete the transition.
+     - Parameter isFinished: A Boolean indicating if the transition
+     has completed.
+    */
     func complete(isFinished: Bool) {
         guard isTransitioning else {
             fatalError()
         }
         
-        for animator in animators {
-            animator.clean()
-        }
-        
-        transitionContainer!.isUserInteractionEnabled = true
+        for a in animators {
+            a.clean()
+        }
+        
+        transitionContainer?.isUserInteractionEnabled = true
         
         let completion = completionCallback
         

}

internal extension MotionController {
    func processContext() {
        guard isTransitioning else {
            fatalError()

        }
    }
    
    /**
     Animates the views. Subclasses should call `prepareTransition` &
     `prepareTransitionPairs` before calling `animate`.
     */
    func animate() {
        guard isTransitioning else {
            fatalError()
        }
        
        for (fv, tv) in transitionPairs {
            for view in fv {
                context.hide(view: view)
            }
            
            for view in tv {
                context.hide(view: view)
            }
        }
        
        var t: TimeInterval = 0
        var v = false
        
        for (i, a) in animators.enumerated() {
            let d = a.animate(fromViews: transitionPairs[i].0, toViews: transitionPairs[i].1)
            
            if d == .infinity {
                v = true
            } else {
                t = max(t, d)
            }
        }
        
        totalDuration = t
        
        if v {
            update(elapsedTime: 0)
        } else {
            complete(after: t, isFinished: true)
        }
    }
    
    /**
     Complete the transition.
     - Parameter after: A TimeInterval.
     - Parameter isFinished: A Boolean indicating if the transition 
     has completed.
     */
    func complete(after: TimeInterval, isFinished: Bool) {
        guard isTransitioning else {
            fatalError()
