         case .Right:
             gesture.edges = .Right
         }
+        gesture.delegate = self
+        return gesture
+    }()
+    
+    lazy private(set) var panGesture: UIPanGestureRecognizer = {
+        let gesture = UIPanGestureRecognizer(
+            target: self,
+            action: "handlePanGesture:"
+        )
+        gesture.delegate = self
         return gesture
     }()
     

    
    
    /**************************************************************************/
    // MARK: - Life Cycle
    /**************************************************************************/
    

    
    final func handlePanGesture(sender: UIGestureRecognizer) {
        _containerView.hidden = false
        if sender.state == .Began {
            _panStartLocation = sender.locationInView(view)
        }
        
        let delta           = CGFloat(sender.locationInView(view).x - _panStartLocation.x)
        let constant        : CGFloat
        let backGroundAlpha : CGFloat
        let drawerState     : DrawerState
        
        switch drawerDirection {
        case .Left:
            drawerState     = _panDelta < 0 ? .Closed : .Opened
            constant        = min(_drawerConstraint.constant + delta, drawerWidth)
            backGroundAlpha = min(
                _kContainerViewMaxAlpha,
                _kContainerViewMaxAlpha*(abs(constant)/drawerWidth)
            )
        case .Right:
            drawerState     = _panDelta > 0 ? .Closed : .Opened
            constant        = max(_drawerConstraint.constant + delta, -drawerWidth)
            backGroundAlpha = min(
                _kContainerViewMaxAlpha,
                _kContainerViewMaxAlpha*(abs(constant)/drawerWidth)
            )
        }
        
        _drawerConstraint.constant = constant
        _containerView.backgroundColor = UIColor(
            white: 0,
            alpha: backGroundAlpha
        )
        
        switch sender.state {
        case .Changed:
            _panStartLocation = sender.locationInView(view)
            _panDelta         = delta
        case .Ended, .Cancelled:
            setDrawerState(drawerState, animated: true)
        default:
            break
        }
    }
    
    final func didtapContainerView(gesture: UITapGestureRecognizer) {
