KWDrawerController
  • November 25, 2023

Drawer view controller that is easy to use!

Installation


CocoaPods (iOS 8+ projects)

KWDrawerController is available on CocoaPods. Add the following to your Podfile:

# Swift 3
pod ‘KWDrawerController’, ‘~> 3.7’

# Swift 4~
pod ‘KWDrawerController’, ‘~> 4.2’
pod ‘KWDrawerController/RxSwift’ # with RxSwift extension

Manually

Simply drag and drop the DrawerController folder into your existing project.

Usage


Code

import UIKit

import KWDrawerController

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

let mainViewController = MainViewController()
let leftViewController = LeftViewController()
let rightViewController = RightViewController()

let drawerController = DrawerController()

drawerController.setViewController(mainViewController, .none)
drawerController.setViewController(leftViewController, .left)
drawerController.setViewController(rightViewController, .right)

/// Customizing

window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = drawerController
window?.makeKeyAndVisible()

return true
}
}

Storyboard

  1. Set DrawerController as the Custom Class of the Initial ViewController.

  2. Connect the DrawerEmbedLeftControllerSegue and/or the DrawerEmbedRightControllerSegue from DrawerController to your left/right controllers.

  3. Connect the DrawerEmbedMainControllerSegue from DrawerController to your main controller.

  4. Set the segue identifiers of both the inspector of DrawerController and the segues themselves.

Open / Close

/// Open
self.drawerController?.openSide(.left)
self.drawerController?.openSide(.right)

/// Close
self.drawerController?.closeSide()

Delegate

 

optional func drawerDidAnimation(
drawerController: DrawerController,
side: DrawerSide,
percentage: Float
)

optional func drawerDidBeganAnimation(
drawerController: DrawerController,
side: DrawerSide
)

optional func drawerWillFinishAnimation(
drawerController: DrawerController,
side: DrawerSide
)

optional func drawerWillCancelAnimation(
drawerController: DrawerController,
side: DrawerSide
)

optional func drawerDidFinishAnimation(
drawerController: DrawerController,
side: DrawerSide
)

optional func drawerDidCancelAnimation(
drawerController: DrawerController,
side: DrawerSide
)

Customizing


Transition

DrawerTransition is a module that determines the rendering direction to move the Drawer. It is implemented by inheriting DrawerTransition.

  • DrawerSlideTransition

  • DrawerScaleTransition
    • Use is not recommended.
  • DrawerParallaxTransition

  • DrawerFloatTransition
    • When using the TransitionOverflow Transition should also use DrawerFloatTransition.

  • DrawerFoldTransition

  • DrawerSwingTransition

  • DrawerZoomTransition

Overflow Transition

Overflow Transition be used when Transition beyond the open range of the drawer.

  • DrawerSlideTransition
  • DrawerScaleTransition
    • This is natural when used with DrawerSlideTransitionDrwaerParallaxTransitionDrawerFoldTransition, and DrawerSwingTransition.

  • DrawerParallaxTransition
  • DrawerFloatTransition
    • When using the Overflow TransitionTransition should also use DrawerFloatTransition.
  • DrawerFoldTransition
    • Use is not recommended.
  • DrawerSwingTransition
    • Use is not recommended.
  • DrawerZoomTransition

Animator

Animator is a module that controls the speed of moving a drawer. It is implemented by inheriting DrawerAnimator or DrawerTickAnimator.

  • DrawerLinearAnimator
  • DrawerCurveEaseAnimator
  • DrawerSpringAnimator
  • DrawerCubicEaseAnimator
  • DrawerQuadEaseAnimator
  • DrawerQuartEaseAnimator
  • DrawerQuintEaseAnimator
  • DrawerCircEaseAnimator
  • DrawerExpoEaseAnimator
  • DrawerSineEaseAnimator
  • DrawerElasticEaseAnimator
  • DrawerBackEaseAnimator
  • DrawerBounceEaseAnimator

Options

 

public var isTapToClose: Bool
public var isGesture: Bool
public var isAnimation: Bool
public var isOverflowAnimation: Bool
public var isShadow: Bool
public var isFadeScreen: Bool
public var isBlur: Bool
public var isEnable: Bool

Changelog


  • 1.0 First Release.
  • 1.1 Bug Fix, Add animations.
  • 2.0 Refactoring.
  • 2.1 Bug Fix, Update animation.
  • 2.2 Fix animation, and some bugs.
  • 3.0 Written in Swift 3.0
  • 3.1 Fix Access Control issues on DrawerController.
  • 3.2 Fix Access Control issues on Transition.
  • 3.3 Fix Access Control issues on initializer.
  • 3.4 Remove debug log.
  • 3.5 Fixed bug where touch ignores is not applied for “Absolute Controller”.
  • 3.6 Fixed an occurs issue while the drawer was open and layout changing.
  • 3.6.1 Fixed layout issue when rotate device.
  • 3.7 Fixed not updating issues on properties.
  • 4.0 Support Swift 4.
  • 4.1 Implement new flag that enables direction auto-switching.
  • 4.1.1 Support RxSwift(If you want).
  • 4.1.2
    • Fix issues on auto layout of child view controllers.
    • Replace naming.
    • Implement getViewController method.
    • Reduce cloning size.
  • 4.1.3
    • Fix crashed on load. (#12)
  • 4.1.4
    • Add state methods to delegate. (#16)
    • Fix access control issues. (#18)
    • Fixed DrawerFloatTransition bug. (#20)
    • DrawerController incorrectly manages lifecycles of child controllers. (#21 #22)
  • 4.1.5
    • Code and performance improvements and bug fixes. (#24 @rivera-ernesto)
  • 4.1.6
    • Fix transition bugs.
    • Fix gesture not working bugs.
    • Fix right drawer placement on iPads (#28 @rivera-ernesto)
  • 4.2
    • Support swift 4.2. (#31)

⚠️ Requirements


  • iOS 8.0+
  • Swift 3.0+

GitHub


View Github

#drawer #menu #storyboard #swift #transition #ui
YOU MIGHT ALSO LIKE...
TvOSTextViewer

Light and scrollable view controller for tvOS to present blocks of text Description TvOSTextViewer is a view controller to present ...

TvOSSlider

TvOSSlider is an implementation of UISlider for tvOS. Description and usage TvOSSlider palliates missing an implementation of UISlider for tvOS as part ...

TvOSScribble

TvOSScribble, based on CoreML, mitigates the lack of a physical numpad area in Siri Remote implementing a handwriting gesture recognizer. ...

TvOSPinKeyboard

PIN keyboard for tvOS Description TvOSPinKeyboard is a view controller that allows easily asking for PIN codes in tvOs Requirements ...

TvOSMoreButton

📺 A tvOS button which truncates long text with '... More'. The TvOSMoreButton is a simple view which aims to ...