PBRevealViewController
PBRevealViewController 是一个-slide UIViewController 子类,用于在 iOS 和 tvOS 上展开主视图控制器上方的侧(左和/或右)视图控制器,灵感来自 SWRevealViewController 子类。
PBRevealViewController 兼容 iOS 和 tvOS,目前支持 Swift 5.0、Swift 4.2(swift-4.2 分支)和 Objective-C!
示例
安装
要运行示例项目,请克隆仓库,然后在示例目录中从终端首先运行 pod install
。
您也可以从任何地方在终端中运行 pod try PBRevealViewController
。
Swift 包管理器
PBRevealViewController支持SPM版本5.1.0及以上。要使用SPM,您应该使用Xcode 11或更高版本打开您的项目。点击文件
-> Swift包
-> 添加包依赖项
,输入https://github.com/iDevelopper/PBRevealViewController
。选择您要使用的版本。
手册
安装它的最简单方法是将其以下内容复制到您的项目
- PBRevealViewController.h
- PBRevealViewController.m
或者
- PBRevealViewController.swift
CocoaPods
PBRevealViewController也可以通过CocoaPods获得。
要将库安装到您的项目中
PBRevealViewController为Objective-C和Swift都提供了子规格!目前,Objective-C是默认子规格。
这意味着要在一个Objective-C项目中使用PBRevealViewController,请将以下内容添加到您的项目Podfile中
pod 'PBRevealViewController'
但如果您正在使用Swift,请添加以下内容以指定Swift子规格
pod 'PBRevealViewController/Swift'
特性
- 使用视图控制器包含实现的Reveal视图控制器。
- 在UIViewController上有一个revealViewController类别方法,可以获取任何子控制器的父PBRevealViewController,类似于UIViewController的navigationController属性。
- 支持任何左/右/主视图控制器的组合。
- 处理旋转。
- 可以作为其他控制器的子视图控制器嵌入,或作为根视图控制器部署。
- 与任何子视图控制器或父控制器协同工作得很好。
- 可以作为其自身的子级来部署,以创建类似级联的分层界面。
- 无缝集成点击和拖动手势识别器。
- 如需,为左/右视图提供模糊效果。
- 提供代理方法以获取控制器的完整状态,并为您自己的代码钩子实现自定义行为。
- 提供代理方法以在推送时请求主视图控制器的动画/完成块。
- 提供代理方法以在推送时请求子控制器的块。
- 提供代理方法以在推送时请求采用UIViewControllerAnimatedTransitioning协议的动画控制器,用于自定义动画转换(推送或设置)。
需求
- iOS 6.0 或更高版本。
- tvOS 9.0 或更高版本。
- ARC 内存管理。
使用方法
- 通过传递“left”(可选)、“main”(必需)和“right”(可选)视图控制器来初始化 PBRevealViewController 实例。
- 像使用任何视图控制器一样,在您的代码中使用 PBRevealViewController 实例。
- 将其作为应用程序窗口的根视图控制器部署,或将它作为其他容器控制器的子视图控制器。
- 您可以保留 PBRevealViewController 提供的 panGestureRecognized 和 tapGestureRecognizer(按默认行为)或者将她添加到“main”视图控制器上的合适视图。例如,在您的“main”视图控制器的 viewDidLoad 方法中,将 panGestureRecognizer 添加到导航栏。
- 取消 PBRevealViewController 提供的手势识别器行为的设置。
- (BOOL)revealControllerTapGestureShouldBegin:
- (BOOL)revealControllerPanGestureShouldBegin:direction:
示例:只有当用户在屏幕边缘开始滑动时,才允许打开左/右视图。
新特性:查看 panFromLeftBorderWidth 和 panFromRightBorderWidth 属性!
Objective-C
- (BOOL)revealControllerPanGestureShouldBegin:(PBRevealViewController *)revealController direction:(PBRevealControllerPanDirection)direction
{
CGPoint point = [revealController.panGestureRecognizer locationInView:self.view];
if (!revealController.isLeftViewOpen && direction == PBRevealControllerPanDirectionRight && point.x < 50.0) {
return YES;
}
if (!revealController.isRightViewOpen && direction == PBRevealControllerPanDirectionLeft && point.x > (self.view.bounds.size.width - 50)) {
return YES;
}
if (revealController.isLeftViewOpen || revealController.isRightViewOpen) {
return YES;
}
return NO;
}
Swift 3
func revealControllerPanGestureShouldBegin(_ revealController: PBRevealViewController!, direction: PBRevealControllerPanDirection) -> Bool {
let point = revealController.panGestureRecognizer.location(in: view)
if !revealController.isLeftViewOpen && direction == .right && point.x < 50.0 {
return true
}
if !revealController.isRightViewOpen && direction == .left && point.x > (view.bounds.size.width - 50) {
return true
}
if revealController.isLeftViewOpen || revealController.isRightViewOpen {
return true
}
return false
}
- 在任何时候,您都可以通过编程或基于用户动作,程序化地显示、隐藏“left”或“right”视图,或替换任意的视图控制器,是否启用动画皆可。
基本 API 描述
- 程序化初始化 PBRevealViewController
- (id)initWithLeftViewController:(UIViewController *)leftViewController mainViewController:(UIViewController *)mainViewController rightViewController:(UIViewController *)rightViewController;
- 使用 Storyboard 初始化 PBRevealViewController
- 推送主视图控制器
- (void)pushMainViewController:(UIViewController *)mainViewController animated:(BOOL)animated;
- 替换视图控制器
- (void)setLeftViewController:(UIViewController *)leftViewController animated:(BOOL)animated;
- (void)setMainViewController:(UIViewController *)mainViewController animated:(BOOL)animated;
- (void)setRightViewController:(UIViewController *)rightViewController animated:(BOOL)animated;
- 其他方法在 PBRevealViewController.h 头文件和 CocoaPods 中有文档说明。
特别说明
特别感谢 Joan Lluch。
这段代码受到了她的优秀且类似的类 SWRevealViewController 的启发。
作者
iDevelopper,[email protected]
许可证
PBRevealViewController遵循MIT许可证。有关更多信息,请参阅LICENSE文件。
请告知我您何时在项目中使用这个控制器!
祝
Patrick Bodet,又名iDevelopper