Awesome
KWDrawerController
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
-
Set
DrawerController
as the Custom Class of the Initial ViewController. -
Connect the
DrawerEmbedLeftControllerSegue
and/or theDrawerEmbedRightControllerSegue
fromDrawerController
to your left/right controllers. -
Connect the
DrawerEmbedMainControllerSegue
fromDrawerController
to your main controller. -
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
Transition
,Overflow Transition
should also useDrawerFloatTransition
.
- When using the
- 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
DrawerSlideTransition
,DrwaerParallaxTransition
,DrawerFoldTransition
, andDrawerSwingTransition
.
- This is natural when used with
- DrawerParallaxTransition
- DrawerFloatTransition
- When using the
Overflow Transition
,Transition
should also useDrawerFloatTransition
.
- When using the
- 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+
🔑 License
KWDrawerController is under MIT license. See the LICENSE file for more info.