(九十四)集成PKRevealController实现左右抽屉视图
使用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实现左右抽屉视图的更多相关文章
- 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...
- iOS 11开发教程(十四)iOS11应用代码添加视图
iOS 11开发教程(十四)iOS11应用代码添加视图 如果开发者想要使用代码为主视图添加视图,该怎么办呢.以下将为开发者解决这一问题.要使用代码为主视图添加视图需要实现3个步骤. (1)实例化视图对 ...
- Spring Boot2 系列教程 (四) | 集成 Swagger2 构建强大的 RESTful API 文档
前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoot 集成 Swagger2 的教程. 什么是 Swagger2 Swagger ...
- 第三方MMDrawerController的使用 抽屉视图+(SUNSlideSwitchView)进度条手势滑动效果实现
下载网站:https://github.com/mutualmobile/MMDrawerController 首先,到下载网址下载MMDrawerController,将文件导入工程,里面有: MM ...
- 我的django之旅(四)模型,模板和视图
一.结合模型,视图和模板 1.数据和模板结合 基本工作流程: (1)在views.py文件中导入我们创建的models (2)在视图函数中使用models,进行crud操作. (3)将取得的数据存入t ...
- 第一百九十四节,jQuery EasyUI,Droppable(放置)组件
jQuery EasyUI,Droppable(放置)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Droppable(放置)组件的使用方 ...
- Java开发笔记(九十四)文件通道的性能优势
前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...
- iOS-MMDrawerController的使用【抽屉视图+(SUNSlideSwitchView)进度条手势滑动】转
下载网站:https://github.com/mutualmobile/MMDrawerController 首先,到下载网址下载MMDrawerController,将文件导入工程,里面有: MM ...
- 测开之路九十四:css之盒子模型
盒子模型 为了演示方便,把内容放到盒子里面 引用css 演示内容 外边距: 4个方向分开写 简写为一条指令,顺序为上右下左 简写为一条指令,第一个值为上下,第二个值为左右 简写为一条指令,只有一个值时 ...
随机推荐
- 《java技术》第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...
- C# IE浏览器
引用Microsoft HTML Object Library 引用 -> com -> Microsoft HTML Object Library 引用后,显示如图 1.判断ie浏览器是 ...
- WIN2008虚拟机安装ORACLE11g记录
---恢复内容开始--- 1.ORACLE11g的安装包下载与解压 官网下载地址:(http://www.oracle.com/technetwork/database/enterprise-edit ...
- C++框架_之Qt的信号和槽的详解
C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...
- 利用Bioperl的SeqIO模块解析fastq文件
测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...
- LintCode题解之统计数字
直接硬搜就可以了,只是需要考虑k为0的情况. public class Solution { /* * @param : An integer * @param : An integer * @ret ...
- ZooKeeper之(五)集群管理
在一台机器上运营一个ZooKeeper实例,称之为单机(Standalone)模式.单机模式有个致命的缺陷,一旦唯一的实例挂了,依赖ZooKeeper的应用全得完蛋. 实际应用当中,一般都是采用集群模 ...
- JVM性能参数调优实践,不会执行Full GC,网站无停滞
原文来自:http://bbs.csdn.net/topics/310110257 本文只做整理记录,供个人学习. 1 JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整 ...
- Latex 文本编辑技巧
临时取消首行缩进 \noindent 生成随机文本 \usepackage{lipsum} \begin{document} \lipsum \end{document} 多栏模式 \usepacka ...
- thinkpad彻底消除"触摸键盘"图标
输入“服务”,进入“查看本地服务”,找到“Touch Keyboard and Handwriting Panel Service”, 将其启动类型改为“禁用”,这样的话重启电脑之后也不会自动启动这触 ...