         return drawerViewController.view
     }
     
-    /// Handle invoked when drawer slides (argument represents percent shown, 0% being 0 and 100% being `drawerSize`)
+    /// Handle invoked when drawer will open
+    public var drawerWillOpen: (() -> Void)?
+    /// Handle invoked when the drawer will close
+    public var drawerWillClose: (() -> Void)?
+    
+    /// Handle invoked when drawer slides (argument represents percent shown,
+    /// 0% being 0 and 100% being `drawerSize`)
     public var drawerDidPan: ((CGFloat) -> Void)?
+    /// Handle invoked when the drawer pan gesture will begin
+    public var drawerPanDidBegin: (() -> Void)?
+    /// Handle invoked when drawer pan did finish (first argument represnts
+    /// the speed at which the drawer will close, second, second represents
+    /// whether the drawer will open or not)
+    public var drawerPanDidFinish: ((NSTimeInterval, Bool) -> Void)?
     
     // ***
     

            
            if fabs(v.x) > 300.0 || fabs(v.y) > 300.0 {
                let dur = Double(deltaUnits) / Double(v.x)
                println(dur)
                if deltaUnits > 0 {
                    openDrawer(customDuration: dur)
                } else {
                    closeDrawer(customDuration: dur)
                }
            } else if numer / denom < showHideThresholdRatio {
                closeDrawer()
            } else {
                openDrawer()
            }
        default:
            var constraint: CGFloat

    /**
        Configures the swipe gesture recognizer.
    */
    private func configureGestureRecognizers() {
        var p: UIPanGestureRecognizer?
        
        if let r = panGestureRecognizer {
