iOS6下实现滑动返回
【转载请注明出处】
之前在看iOS7滑动返回时,发现了一个iOS6 SDK下的第三方实现,今天偶然间发现了作者在其博客上对该实现的一些心得,读来深觉之前的思考太过肤浅,许多实际的问题没有考虑到。帖子链接如下:
http://www.vinqon.com/codeblog/?detail/11108
工程github地址如下:
https://github.com/vinqon/MultiLayerNavigation
在帖子中作者贴出了实现代码,此处只说明一下思路和可能产生不兼容的情况,贴别人代码这么Low的行为还是算了。
代码中是通过继承UINavigationController,并在其中添加了一个UIPanGestureRecognizer实现的,大体思路如下:
1、重载pushViewController和popViewController,在push之前,截取当前界面保存为UIImage,在pop之前,移除最近保存的截图;
2、在UIPanGestureRecognizer的target中,做4件事:
(1)当手势触发时(panGestureRecognizer.state == UIGestureRecognizerStateBegan),把最近保存的截图(通常来说即上一级界面的截图,特殊情况见下文)放到当前viewController.view的下方;
(2)当手指在屏幕上移动时,相应地修改当前viewController.view.frame,使其下方的截图逐渐露出;
(3)当手势结束时(panGestureRecognizer.state ==UIGestureRecognizerStateEnded),调用重载的popViewController;
(4)当手势取消时(panGestureRecognizer.state ==UIGestureRecognizerStateEnded),将当前viewController.view.frame恢复原样。
如此就基本实现了滑动返回的手势支持,要进一步加强的,应该说有两方面:
1、效果上尽可能接近iOS7原生手势的体验:
(1)判断手势触发时的位置,只在屏幕边缘才起作用【Mark:没有找到具体的数字说明触发的范围】;
(2)手势触发时修改当前viewController.view及其所有子view的透明度;
(3)导航栏的渐变:当前界面的导航栏渐渐淡出,上一级菜单的导航栏的渐渐清晰。事实上上一级菜单的整个界面都应有一个渐渐清晰的效果,只是导航栏作为多个ViewController共享的部分,需要同时显示两种效果确实需要一定当量的脑细胞。(作者在帖子中描述了网易新闻和新浪微博各自的实现)此外,默认的导航栏中生成的左上角返回键,其文本就是上一级菜单的主标题,这种情况下“返回会渐渐变成主标题”。
2、实现中没有考虑的一些因素:
(1)setViewControllers的支持:一次性向栈中加入多个ViewController时,仅仅重载push就显得无能为力了;
(2)内存的控制:每进入一级界面都需要截取上一级界面,当层级较多时对内存的压力不小,似乎可以通过降低截取图的分辨率来达到一定的改善。将截图保存到disk上也可以,只是在快速进出时,是否会造成卡顿尚未验证。
(3)对界面中可能造成手势冲突的兼容:比如UIScrollView就内置了一个panGestureRecognizer,还有UIWebView的手势支持。
(4)当前界面可能能够造成上一级界面发生更改:比如更换主题这样的功能,以截图的方式来做的话,基本无解。
(5)截图的方式是直接截取viewController.view,没有考虑tabbar等情况,在有tabbar的情况下,下方会有一道黑边。
【参考】
1、iOS页面右滑返回交互实现方案
http://www.vinqon.com/codeblog/?detail/11108
iOS6下实现滑动返回的更多相关文章
- iOS7下滑动返回与ScrollView共存二三事
[转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...
- UINavigationController侧滑滑动返回 卡死问题
UINavigationController滑动返回,有需要的朋友可以参考下. 最近做了UINavigationController的滑动返回(IOS7及以后系统默认支持的), 主要分成以下几步以及碰 ...
- iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果
8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...
- 使用SlidingPaneLayout 实现仿微信的滑动返回
上周,公司的项目改版要求加上一个右滑返回上一个界面,于是就在网上找了一些开源库打算实现.但是在使用的时候遇见了许多的问题.试了两天用过 https://github.com/ikew0ng/Swipe ...
- Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭
我们知道.APP在设计上习惯性的把返回button放在屏幕的左上角,那么,在非常多时候(尤其是大屏幕手机),操作改返回button,就会有诸多不便了.为了更加方便实现"返回"功能. ...
- Android-通过SlidingMenu高仿微信6.2最新版手势滑动返回(二)
转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/46453627 本文出自:[海龙的博客] 一.概述 在上一篇博文中,博文 ...
- Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)
近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...
- iOS 如何设置导航的滑动返回手势, 和系统饿一样
iOS 7 滑动返回那些事儿 2014/05/17 Wei .entry-meta .entry-header 在智能机越来越普及,屏幕越做越大的当下,滑动返回手势已经成为了一个应用的标配功能,甚至可 ...
- iOS 自定义返回按钮,保留系统滑动返回
原文链接 自定义返回按钮保留系统滑动返回手势.gif 1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使 ...
随机推荐
- Rsyslog日志服务搭建
rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序.Centos 6.x默认的rsyslog版本是5.x. 网上关于rsyslog的安装配置文档倒是不少,但 ...
- 微信 小程序布局 swiper 页面
JS // pages/classify/swiper.js Page({ /** * 页面的初始数据 */ data: { current:0 }, titleBtn:function(e){ ...
- GCC 提供的原子操作
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作. 其声明如下: type __sync_fetch_and_add (type *ptr, typ ...
- 深入理解JAVA虚拟机阅读笔记2——垃圾回收
线程私有的程序计数器.虚拟机栈和本地方法栈随线程而生,随线程而灭.栈中的栈帧随方法的进入和退出有条不紊的入栈和出栈. 而Java堆和方法区因为需要多大内存.创建多少对象都是不确定的,因此这两个区域是垃 ...
- jQuery Mobile页面跳转后未加载外部JS原因分析及解决
在使用jQuery Mobile进行Web开发中,当页面跳转时(pageA => pageB),在pageB中引用的JS并未成功运行.因为,JQM并为将整个页面加载到当前的dom中,仅将data ...
- BZOJ5308 ZJOI2018胖
贝尔福特曼(?)的方式相当于每次将所有与源点直接相连的点的影响区域向两边各扩展一格.显然每个点在过程中最多更新其他点一次且这些点构成一段连续区间.这个东西二分st表查一下就可以了.注意某一轮中两点都更 ...
- #46 delete(动态规划+树状数组)
二维的dp非常显然,但这也没有什么优化的余地了. 注意到最后的方案中只有产生贡献的位置是有用的,剩下的部分可以在该范围内任意选取. 所以我们考虑设f[i]为i号位最后产生贡献的答案,则f[i]=max ...
- JAVA里面的“指针”
JAVA里面的“指针” 众所周知,在java里面是没有指针的.那为何此处还要说java里面的“指针”呢?我们知道在C/C++中,指针是指向内存中的地址.那么在Java里 ...
- 【Learning】辛普森积分
辛普森积分 这种积分法很暴力:只要求你实现出函数求值\(f(x)\). 使用辛普森积分,我们可以求出函数一段区间\([l,r]\)的近似积分.记\(mid=\frac{l+r}2\),有: \[ \i ...
- struts2练习时犯的错误(2016年11月4日)
1.Tomcat启动时报错 严重: 文档无效: 找不到语法. at (null:3:8) org.xml.sax.SAXParseException; systemId: file:/F:/Progr ...