         
         switch sender.state {
         case .Changed:
+            let isAppearing = drawerState != .Opened
+            if _isAppearing == nil {
+                _isAppearing = isAppearing
+                drawerViewController?.beginAppearanceTransition(isAppearing, animated: true)
+                mainViewController?.beginAppearanceTransition(!isAppearing, animated: true)
+            }
+
             _panStartLocation = sender.locationInView(view)
             _panDelta         = delta
         case .Ended, .Cancelled:

        tapGesture.delegate = self
        return view
    }()
    
    public var screenEdgePanGestureEnabled = true
    
    public private(set) lazy var screenEdgePanGesture: UIScreenEdgePanGestureRecognizer = {

    @IBInspectable public var drawerWidth: CGFloat = 280 {
        didSet { _drawerWidthConstraint?.constant = drawerWidth }
    }

    public var displayingViewController: UIViewController? {
        switch drawerState {
        case .Closed:
            return mainViewController
        case .Opened:
            return drawerViewController
        }
    }

    public var mainViewController: UIViewController! {
        didSet {
            if let oldController = oldValue {
