           switch revealType {
             
           case RevealType.reveal:
-            transactionContext.containerView.insertSubview(
-              toView, aboveSubview: fromView)
+
+            transactionContext.containerView.insertSubview(
+              toView,
+              aboveSubview: fromView)
+
+            fadeView.alpha = 0.0
+            transactionContext.containerView.insertSubview(
+              fadeView,
+              belowSubview: toView)
+
+            UIView.animate(withDuration: duration) {
+              fadeView.alpha = 1.0
+            }
+
             toView.drawAnimatedCircularMask(
               startFrame: rect,
               duration: animationTime,

    viewController: UIViewController,
    _ duration: TimeInterval = DEFAULT_CIRCULAR_ANIMATION_DURATION,
    _ startFrame: CGRect = CGRect.zero,
    _ completion: (() -> Void)? = nil) {
    self.push(viewController, duration, startFrame, revealType: .reveal, completion)
  }

  func radialDismiss(
    _ duration: TimeInterval = DEFAULT_CIRCULAR_ANIMATION_DURATION,
    _ startFrame: CGRect = CGRect.zero,
    _ completion: (() -> Void)? = nil) {
    self.push(nil, duration, startFrame, revealType: .unreveal, completion)
  }
  
  private func push(
    _ viewController: UIViewController?,
    _ duration: TimeInterval = DEFAULT_CIRCULAR_ANIMATION_DURATION,
    _ startFrame: CGRect = CGRect.zero,
    revealType: RevealType = .reveal,
    _ transitionCompletion: (() -> Void)? = nil) {
    

        if let toView: UIView = toViewController?.view,
          let fromView: UIView = fromViewController?.view {

          let fadeView: UIView = UIView(frame: fromView.frame)
          fadeView.backgroundColor = fadeColor

          toView.isOpaque = true
          fromView.isOpaque = true

