         }
     }
 
+    /// The blur radius of the drawer's shadow.
     @IBInspectable public var shadowRadius: CGFloat = 3 {
         didSet {
             containerView.leftWrapperView.layer.shadowRadius = shadowRadius

        return gestureRecognizer
    }()

    public private(set) lazy var leftDrawerCloseOnTapGestureRecognizer: UITapGestureRecognizer = {
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture))
        gestureRecognizer.delegate = self
        return gestureRecognizer
    }()

    public private(set) lazy var rightDrawerCloseOnTapGestureRecognizer: UITapGestureRecognizer = {
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture))
        gestureRecognizer.delegate = self
        return gestureRecognizer
    }()

    public private(set) lazy var leftDrawerCloseWithPanGestureRecognizer: UIPanGestureRecognizer = {
        let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didRecognizePanGesture))
        gestureRecognizer.delegate = self


import UIKit

/// Constants that specify the side of a drawer.
@objc public enum KZDrawerSide: Int {
    case Left
    case Right
}

/// The `KZSideDrawerControllerDelegate` protocol defines optional methods for a delegate of a `KZSideDrawerController` object.
@objc public protocol KZSideDrawerControllerDelegate {

    // MARK: - Responding to Side Drawer Controller Events

    /// Tells the delegate that the drawer is about to be opened.
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - parameter viewController: The view controller whose drawer view is about to be opened.
    /// - parameter side: The side of the drawer that will be opened.
    /// - parameter animated: `true` if the opening will be animated, otherwise `false`.
    optional func sideDrawerController(sideDrawerController: KZSideDrawerController, willOpenViewController viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool)

    /// Tells the delegate that the drawer was opened.
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - parameter viewController: The view controller whose drawer view was opened.
    /// - parameter side: The side of the drawer that was opened.
    /// - parameter animated: `true` if the opening was animated, otherwise `false`.
    optional func sideDrawerController(sideDrawerController: KZSideDrawerController, didOpenViewController viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool)

    /// Tells the delegate that the drawer is about to be closed.
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - parameter viewController: The view controller whose drawer view is about to be closed.
    /// - parameter side: The side of the drawer that will be closed.
    /// - parameter animated: `true` if the closing will be animated, otherwise `false`.
    optional func sideDrawerController(sideDrawerController: KZSideDrawerController, willCloseViewController viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool)

    /// Tells the delegate that the drawer was closed.
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - parameter viewController: The view controller whose drawer view was closed.
    /// - parameter side: The side of the drawer that was closed.
    /// - parameter animated: `true` if the closing was animated, otherwise `false`.
    optional func sideDrawerController(sideDrawerController: KZSideDrawerController, didCloseViewController viewController: UIViewController, forSide side: KZDrawerSide, animated: Bool)

    // MARK: - Overriding View Rotation Settings

    /// Asks the delegate for the interface orientations that the side drawer controller supports.
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - returns: The bit mask specifying the interface orientations that the side drawer controller supports.
    optional func sideDrawerControllerSupportedInterfaceOrientations(sideDrawerController: KZSideDrawerController) -> UIInterfaceOrientationMask

    /// Asks the delegate for the preferred interface orientation to use when presenting the side drawer controller
    ///
    /// - parameter sideDrawerController: The side drawer controller.
    /// - returns: The preferred interface orientation to use when presenting the side drawer controller.
    optional func sideDrawerControllerPreferredInterfaceOrientationForPresentation(sideDrawerController: KZSideDrawerController) -> UIInterfaceOrientation

}

/// The `KZSideDrawerController` class is a container view controller that manages drawer views.
public class KZSideDrawerController: UIViewController, UIGestureRecognizerDelegate {

    // MARK: - Container View
