         return scrimColor.colorWithAlphaComponent(CGColorGetAlpha(scrimColor.CGColor) * slideOffsetFor(side))
     }
 
+    private func willOpenViewController(viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool) {
+        viewController.beginAppearanceTransition(true, animated: animated)
+        delegate?.sideDrawerController?(self, willOpenViewController: viewController, forSide: side, animated: animated)
+    }
+
+    private func didOpenViewController(viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool) {
+        viewController.endAppearanceTransition()
+        delegate?.sideDrawerController?(self, didOpenViewController: viewController, forSide: side, animated: animated)
+    }
+
+    private func willCloseViewController(viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool) {
+        viewController.beginAppearanceTransition(false, animated: animated)
+        delegate?.sideDrawerController?(self, willCloseViewController: viewController, forSide: side, animated: animated)
+    }
+
+    private func didCloseViewController(viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool) {
+        viewController.endAppearanceTransition()
+        delegate?.sideDrawerController?(self, didCloseViewController: viewController, forSide: side, animated: animated)
+    }
+
 }
        }

        let animations: () -> Void = {
            self.sideViewContainerFor(side).backgroundColor = self.scrimColorFor(side)
            self.setNeedsStatusBarAppearanceUpdate()
            self.containerView.layoutIfNeeded()
        }


public class KZSideDrawerController: UIViewController, UIGestureRecognizerDelegate {

    // MARK: - Container View

    private lazy var containerView: KZSideDrawerContainerView = {
        let containerView = KZSideDrawerContainerView()
