             return
         }
         
+        completion?(true)
+    }
+
+    open func finalizeTransition() {
+        
+        headerTransitionView.isHidden = true
+        isTransitioning = false
+    }
+    
+    open func turnOnTabBarTransitionMode(spacing: TransitionSpacing, duration: TimeInterval, animated: Bool, completion: ((Bool) -> ())? = nil) {
+        
         let prepareCompletion: () -> () = {
             self.headerTransitionView.isHidden = false
         }

        
        if animated {
            UIView.animate(withDuration: duration, animations: {
                self.pageTabBarController.view.transform = CGAffineTransform(translationX: 0, y: spacingHeight - self.revealingGapHeight)
            }) { finished in
                prepareCompletion()
                completion?(finished)
            }
        } else {
            pageTabBarController.view.transform = CGAffineTransform(translationX: 0, y: spacingHeight - revealingGapHeight)
            prepareCompletion()
            completion?(true)
        }

    }
    
    open func finalizeTransition(headerHeight: CGFloat, duration: TimeInterval, animated: Bool, completion: ((Bool) -> ())? = nil) {
        
        parallaxHeaderHeight = headerHeight
        
        let finalizeCompletion: () -> () = {
            self.headerTransitionView.isHidden = true
            self.isTransitioning = false
        }
        
        if animated {
            UIView.animate(withDuration: duration, animations: {

        self.parallaxHeaderHeight = parallaxHeaderHeight
        revealingGapHeight = parallaxHeaderHeight
        pageTabBarController.parallaxDelegate = self
    }
    
    required public init?(coder aDecoder: NSCoder) {
