ZKDrawerController
Swift 中的 iOS 浏览器控制器
需求
- Xcode 10.2+
- Swift 5.0+
- iOS 部署目标 10.0+
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:
$ gem install cocoapods
要使用 CocoaPods 在 Xcode 项目中集成 ZKDrawerController,请在您的 Podfile
中指定它:
source 'https://github.com/superk589/ZKDrawerController.git'
platform :ios, '8.0'
use_frameworks!
target 'YourApp' do
pod 'ZKDrawerController'
end
然后,运行以下命令:
$ pod install
Carthage
Carthage 是一个去中心化的依赖管理器,它可以编译您的依赖并为您提供二进制框架。
您可以使用以下命令通过 Homebrew 安装 Carthage
$ brew update
$ brew install carthage
要使用 Carthage 将 ZKDrawerController 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "superk589/ZKDrawerController"
运行 carthage update
命令以构建框架,并将构建的 ZKDrawerController.framework
拖入您的 Xcode 项目中。
Swift Package Manager
将ZKDrawerController声明为包依赖。
.package(
name: "ZKDrawerController",
url: "https://github.com/superk589/ZKDrawerController",
.upToNextMinor(from: "0.6.1")),
手动
如果您不希望使用上述任何依赖关系管理器,您可以手动将ZKDrawerController集成到您的项目中。
使用
初始化
let centerController = UIViewController()
let leftController = UIViewController()
let rightController = UIViewController()
let drawerController = ZKDrawerController(center: centerController, right: rightController)
let drawerController = ZKDrawerController(center: centerController, left: leftController)
let drawerController = ZKDrawerController(center: centerController, right: rightController, left: leftController)
// have none of the two sides, and then add dynamically
let drawerController = ZKDrawerController(center: centerController)
drawerController.rightViewController = UIViewController()
设置抽屉样式
// side controller covers the main controller, shadows the edge of side controllers' view
drawerController.drawerStyle = .cover
// side controller inserts below the main controller, shadows the edge of main controller's view
drawerController.drawerStyle = .insert
// side controller lays beside the main controller
drawerController.drawerStyle = .plain
手动显示或隐藏侧边控制器
drawerController.show(.right, animated: true)
drawerController.show(.left, animated: true)
drawerController.hide(animated: true)
设置主控制器缩放
// scale should be 0 to 1
drawerController.mainScale = 0.8
设置背景颜色或图像
// set background color
drawerController.containerView.backgroundColor = UIColor.white
// set background image
drawerController.backgroundImageView.image = image
设置在显示侧视图时中心控制器的视图前景色
// this view will change it's alpha while side view is showing from 0 to 1
drawerController.mainCoverView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
设置左右边距宽度
drawerController.defaultRightWidth = 300
drawerController.defaultLeftWidth = 300
设置阴影宽度
drawerController.shadowWidth = 5
在主控制器中设置手势识别器宽度
drawerController.gestureRecognizerWidth = 40
需要导航回退手势失败
默认值为 true(如果设置为 false,则显示左侧抽屉手势优先级更高)
drawerController.shouldRequireFailureOfNavigationPopGesture = true
设置手势优先级
优先级较高的手势会在抽屉控制器的手势之前处理,而优先级较低的手势会在抽屉控制器手势失败后处理。
drawerController.higherPriorityGestures = [gesture1, gesture2]
drawerController.lowerPriorityGestures = [gesture3, gesture4]
动态设置侧边或主控制器
// set or replace
drawerController.centerViewController = newViewController
drawerController.rightViewController = newViewController
drawerController.leftViewController = newViewController
// remove the side view controller, mainVC can not be removed
drawerController.rightViewController = nil
drawerController.leftViewController = nil
使用ZKDrawerController作为您的根控制器并显示基于各种主控制器的侧控制器。
// in AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let home = ViewController()
let nav = UINavigationController(rootViewController: home)
let drawer = ZKDrawerController(center: nav, right: nil, left: nil)
// do some setup
drawer.mainScale = 0.8
drawer.drawerStyle = .cover
// ...
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = drawer
window?.makeKeyAndVisible()
home.drawerController = drawer
return true
}
// in ViewController.swift
var drawerController: ZKDrawerController!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let vc = UIViewController()
drawerController.rightViewController = vc
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
drawerController.rightViewController = nil
}