使用PKRevealController可以实现类似于QQ等软件的左右抽屉视图,拖出的视图分为leftView和rightView,分别取自View的左半部分和右半部分,因此,根据不同的需求,可以选择使用一个View作为leftView和rightView,也可以指定两个View。

下面介绍这个框架的基本使用步骤。

①从github下载源码:PKRevealController

②导入Source/PKRevealController文件夹到工程。

③为了方便,下面以代码的方式创建窗口的根控制器,利用storyboard创建左右抽屉视图。

1.要利用代码创建根控制器,首先在工程设置中去掉Main Interface中的Main。

2.在AppDelegate中,导入PKRevealController.h,创建根控制器,在这里,默认展示的控制器被称为frontView,左右抽屉分别称为leftView和rightView。

④PKRevealController的类方法revealControllerWithFrontViewController方法有两个,一个是仅创建单个抽屉,一个是两个一起创建,只要传入UIViewController即可,这里演示的是通过leftView.storyboard创建的视图同时作为leftView和rightView。

注意最后根控制器应该是revealController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    UIViewController *mainVc = [[UIViewController alloc] init];
mainVc.view.backgroundColor = [UIColor whiteColor]; UIStoryboard *sb = [UIStoryboard storyboardWithName:@"leftView" bundle:nil];
UIViewController *leftVc = sb.instantiateInitialViewController;
UIViewController *rightVc = leftVc; self.revealVc = [PKRevealController revealControllerWithFrontViewController:mainVc leftViewController:leftVc rightViewController:rightVc]; self.revealVc.delegate = self; self.revealVc.animationDuration = 0.25; self.window.rootViewController = self.revealVc; [self.window makeKeyAndVisible]; return YES; }

需要注意的是,storyboard的instantiateInitialViewController方法每调用一次,就会创建一个新的UIViewController,如果要共用一个,不能调用两次。

⑤设置代理的目的是监听当前的焦点位置,是leftView、frontView还是rightView;设置动画间隔是为了设置抽屉展开和收起的动画速度,快一些效果更好。

一个下图这样布局的storyboard在leftView和rightView上分别展示如下:

       

⑥实现代理方法可以监听状态的改变:

- (void)revealController:(PKRevealController *)revealController didChangeToState:(PKRevealControllerState)state{

    switch (state) {
case PKRevealControllerShowsFrontViewController:
NSLog(@"展示主窗口%@",revealController.frontViewController);
break;
case PKRevealControllerShowsLeftViewController:
NSLog(@"展示左窗口%@",revealController.leftViewController);
break;
case PKRevealControllerShowsRightViewController:
NSLog(@"展示右窗口%@",revealController.rightViewController);
break;
default:
break;
} }

⑦通过下面两个方法实现抽屉加长、回缩。

/**
让抽屉进入展示模式,也就是加长一段 @param animated 是否有动画效果
@param completion 执行完毕后的回调
*/
- (void)enterPresentationModeAnimated:(BOOL)animated
completion:(PKDefaultCompletionHandler)completion; /**
如果在展示模式下,则回到正常的抽屉或者退出展示。 @param entirely 如果传YES,会将整个抽屉退出,传NO则只退出展示模式
@param animated 是否有动画效果
@param completion 执行完毕后的回调
*/
- (void)resignPresentationModeEntirely:(BOOL)entirely
animated:(BOOL)animated
completion:(PKDefaultCompletionHandler)completion;

要判断当前所属模式,使用下面的成员属性:

@property (nonatomic, readonly) BOOL isPresentationModeActive;

下面的代码通过给leftView和rightView重写触摸事件,通过拿到revealViewController来更改抽屉模式。

注意应该在AppDelegate中将revealController暴露出来才能获取到。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    AppDelegate *delegate = [UIApplication sharedApplication].delegate;
PKRevealController *revealVc = [delegate sharedRevealVc];
if([revealVc isPresentationModeActive]){
[revealVc resignPresentationModeEntirely:NO animated:YES completion:nil];
}else{
[revealVc enterPresentationModeAnimated:YES completion:nil];
} }

(九十四)集成PKRevealController实现左右抽屉视图的更多相关文章

  1. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...

  2. iOS 11开发教程(十四)iOS11应用代码添加视图

    iOS 11开发教程(十四)iOS11应用代码添加视图 如果开发者想要使用代码为主视图添加视图,该怎么办呢.以下将为开发者解决这一问题.要使用代码为主视图添加视图需要实现3个步骤. (1)实例化视图对 ...

  3. Spring Boot2 系列教程 (四) | 集成 Swagger2 构建强大的 RESTful API 文档

    前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoot 集成 Swagger2 的教程. 什么是 Swagger2 Swagger ...

  4. 第三方MMDrawerController的使用 抽屉视图+(SUNSlideSwitchView)进度条手势滑动效果实现

    下载网站:https://github.com/mutualmobile/MMDrawerController 首先,到下载网址下载MMDrawerController,将文件导入工程,里面有: MM ...

  5. 我的django之旅(四)模型,模板和视图

    一.结合模型,视图和模板 1.数据和模板结合 基本工作流程: (1)在views.py文件中导入我们创建的models (2)在视图函数中使用models,进行crud操作. (3)将取得的数据存入t ...

  6. 第一百九十四节,jQuery EasyUI,Droppable(放置)组件

    jQuery EasyUI,Droppable(放置)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Droppable(放置)组件的使用方 ...

  7. Java开发笔记(九十四)文件通道的性能优势

    前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...

  8. iOS-MMDrawerController的使用【抽屉视图+(SUNSlideSwitchView)进度条手势滑动】转

    下载网站:https://github.com/mutualmobile/MMDrawerController 首先,到下载网址下载MMDrawerController,将文件导入工程,里面有: MM ...

  9. 测开之路九十四:css之盒子模型

    盒子模型 为了演示方便,把内容放到盒子里面 引用css 演示内容 外边距: 4个方向分开写 简写为一条指令,顺序为上右下左 简写为一条指令,第一个值为上下,第二个值为左右 简写为一条指令,只有一个值时 ...

随机推荐

  1. Python中模块之logging & subprocess的讲解

    subprocess & logging模块的介绍 1. subprocess 该模块替代了os.system & os.pawn*所实现的功能. 2. logging 1. 日志五大 ...

  2. C语言程序设计第一次作业 冯亚杰

    (一)实验总结 求圆面积和周长 (1)题目 输入圆的半径,计算圆的周长和面积. (2)流程图 (3)测试数据及运行结果 测试数据1:r=7 运行结果: 测试数据2:r=5 运行结果: (4)实验分析 ...

  3. 关于ajax的content-download时间过慢问题的解决方案与思考

    前言:   做前端架构很久很久了,经常到我这里都是些棘手的问题,之前没有养成很好的记录问题的习惯,以后会努力成文,积累. 于是今天就有个这篇文章.关于ajax的content-download时间过慢 ...

  4. Java 反射实现实体转Map时,父类元素丢失

    public class BeanToMap { public static Map<String, Object> ConvertObjToMap(Object obj) { Map&l ...

  5. SSM项目搭建之配置文件

    1.1  pom文件配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  6. linux系统下安装jdk、tomcat、mysql、redis

    一,安装jdk 1.rpm -qa | grep jdk 检测是否安装jdk 2.rpm -e --nodeps 要卸载的已有jdk名称 3.tar -zxvf jdk-7u71-linux-i586 ...

  7. 用burpsuite暴力破解后台

    [实验原理] Burp Suite是Web应用程序测试的最佳工具之一,其多种功能执行各种任务.请求的拦截和修改,扫描web应用程序漏洞,以暴力破解登录表单,执行会话令牌等多种的随机性检查. Burp ...

  8. Bootstrap 遮罩层实现方式

    直接上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...

  9. python的IDE(pycharm)安装以及简单配置

    使用IDE的好处 界面更友好,看起来更舒服 智能提示功能很赞,大大提高开发效率 pycharm的安装过程 去pycharm官网下载安装包,请下载专业版,建议不要去网上下载汉化版 点击安装包一直下一步即 ...

  10. MongoDB 监控

    在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. MongoDB中提供了m ...