     /// Prepares the transition fromView & toView pairs.
     func prepareTransitionPairs() {
         guard isTransitioning else {
-            fatalError()
+            return
         }
         
         transitionPairs = [([UIView], [UIView])]()
         
-        guard let v = animators else {
-            return
-        }
-        
-        for a in v {
-            let fv = context.fromViews.filter { (view: UIView) -> Bool in
-                return a.canAnimate(view: view, isAppearing: false)
-            }
-            
-            let tv = context.toViews.filter { (view: UIView) -> Bool in
-                return a.canAnimate(view: view, isAppearing: true)
+        guard let a = animators else {
+            return
+        }
+        
+        for x in a {
+            let fv = context.fromViews.filter {
+                return x.canAnimate(view: $0, isAppearing: false)
+            }
+            
+            let tv = context.toViews.filter {
+                return x.canAnimate(view: $0, isAppearing: true)
             }
             
             transitionPairs?.append((fv, tv))

internal extension MotionController {
    // should call this after `prepareTransitionPairs` & before `processContext`
    func insert<T>(preprocessor: MotionPreprocessor, before: T.Type) {
        guard var v = preprocessors else {
            return
        }
        
        let i = v.index { $0 is T } ?? v.count
        preprocessor.context = context
        v.insert(preprocessor, at: i)
    }
}

        
        totalDuration = t
        
        if b {
            update(elapsedTime: 0)
        } else {
            complete(after: t, isFinished: true)
