KWDrawerController
易于使用的分页视图控制器!
安装
CocoaPods (iOS 8+ 项目)
KWDrawerController 可在 CocoaPods 中使用。将以下内容添加到您的 Podfile 中
# Swift 3
pod 'KWDrawerController', '~> 3.7'
# Swift 4~
pod 'KWDrawerController', '~> 4.2'
pod 'KWDrawerController/RxSwift' # with RxSwift extension
手动
只需将 DrawerController
文件夹拖放到您的现有项目中。
使用方法
代码
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
}
}
故事板
-
将
DrawerController
设置为首屏VC的Custom Class。 -
将
DrawerEmbedLeftControllerSegue
和/或DrawerEmbedRightControllerSegue
从DrawerController
连接到你的左右控制器。 -
将
DrawerEmbedMainControllerSegue
从DrawerController
连接到你的主控制器。 -
设置
DrawerController
的检查器及segues的segue标识符。
打开/关闭
/// Open
self.drawerController?.openSide(.left)
self.drawerController?.openSide(.right)
/// Close
self.drawerController?.closeSide()
委托
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
)
自定义
转换
DrawerTransition
是一个模块,它决定了Drawer的渲染方向。通过继承DrawerTransition
来实现。
- DrawerSlideTransition
- 抽屉缩放过渡
- 不推荐使用。
- 抽屉视差过渡
- 抽屉浮动过渡
- 当使用
Transition
时,也应使用DrawerFloatTransition
进行Overflow Transition
。
- 当使用
- 抽屉折叠过渡
- 抽屉摆动过渡
- 抽屉缩放过渡
Overflow Transition
Overflow Transition
可用于 Transition
超出抽屉展开范围的情况。
- DrawerSlideTransition
- 抽屉缩放过渡
- 当与
DrawerSlideTransition
、DrwaerParallaxTransition
、DrawerFoldTransition
和DrawerSwingTransition
一起使用时,这是自然的。
- 当与
- 抽屉视差过渡
- 抽屉浮动过渡
- 当使用
Overflow Transition
时,也应使用DrawerFloatTransition
。
- 当使用
- 抽屉折叠过渡
- 不推荐使用。
- 抽屉摆动过渡
- 不推荐使用。
- 抽屉缩放过渡
Animator
Animator 是一个控制抽屉移动速度的模块。它通过继承 DrawerAnimator
或 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
变更日志
- 1.0 第一版。
- 1.1 修复错误,新增动画。
- 2.0 重构。
- 2.1 修复错误,更新动画。
- 2.2 修复动画和一些错误。
- 3.0 使用 Swift 3.0 编写。
- 3.1 修复 DrawerController 上的访问控制问题。
- 3.2 修复 Transition 上的访问控制问题。
- 3.3 修复初始化器上的访问控制问题。
- 3.4 删除调试日志。
- 3.5 修复了一个当“绝对控制器”时忽略触摸的问题。
- 3.6 在抽屉开启且布局更改时修复了出现的问题。
- 3.6.1 修复设备旋转时的布局问题。
- 3.7 修复属性未更新问题。
- 4.0 支持 Swift 4。
- 4.1 实现新标志,允许方向自动切换。
- 4.1.1 支持RxSwift(如果需要)。
- 4.1.2
- 修复子视图控制器自动布局问题。
- 更改命名。
- 实现
getViewController
方法。 - 减少克隆大小。
- 4.1.3
- 修复加载时崩溃问题。 (#12)
- 4.1.4
- 向代理中添加状态方法。 (#16)
- 修复访问控制问题。 (#18)
- 修复DrawerFloatTransition的bug。 (#20)
- DrawerController不正确地管理子控制器的生命周期。 (#21 #22)
- 4.1.5
- 代码和性能改进以及bug修复。 (#24 @rivera-ernesto)
- 4.1.6
- 修复过渡bug。
- 修复手势失效bug。
- 修复iPad上的右侧抽屉位置问题 (#28 @rivera-ernesto)
- 4.2
- 支持swift 4.2. (#31)
⚠️ 要求
- iOS 8.0+
- Swift 3.0+
🔑 许可证
KWDrawerController处于MIT许可证下。有关更多信息,请参阅LICENSE文件。