【转载请注明出处】

之前在看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下实现滑动返回的更多相关文章

  1. iOS7下滑动返回与ScrollView共存二三事

    [转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...

  2. UINavigationController侧滑滑动返回 卡死问题

    UINavigationController滑动返回,有需要的朋友可以参考下. 最近做了UINavigationController的滑动返回(IOS7及以后系统默认支持的), 主要分成以下几步以及碰 ...

  3. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  4. 使用SlidingPaneLayout 实现仿微信的滑动返回

    上周,公司的项目改版要求加上一个右滑返回上一个界面,于是就在网上找了一些开源库打算实现.但是在使用的时候遇见了许多的问题.试了两天用过 https://github.com/ikew0ng/Swipe ...

  5. Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭

    我们知道.APP在设计上习惯性的把返回button放在屏幕的左上角,那么,在非常多时候(尤其是大屏幕手机),操作改返回button,就会有诸多不便了.为了更加方便实现"返回"功能. ...

  6. Android-通过SlidingMenu高仿微信6.2最新版手势滑动返回(二)

    转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/46453627 本文出自:[海龙的博客] 一.概述 在上一篇博文中,博文 ...

  7. Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)

    近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...

  8. iOS 如何设置导航的滑动返回手势, 和系统饿一样

    iOS 7 滑动返回那些事儿 2014/05/17 Wei .entry-meta .entry-header 在智能机越来越普及,屏幕越做越大的当下,滑动返回手势已经成为了一个应用的标配功能,甚至可 ...

  9. iOS 自定义返回按钮,保留系统滑动返回

    原文链接 自定义返回按钮保留系统滑动返回手势.gif 1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使 ...

随机推荐

  1. PAT 甲级 1113 Integer Set Partition

    https://pintia.cn/problem-sets/994805342720868352/problems/994805357258326016 Given a set of N (> ...

  2. Envoy如何打败Linkerd成为L7负载平衡器的最佳选择?

    本文转自:http://www.servicemesh.cn/?/article/41 作者:MIKE WHITE 翻译:姚炳雄 原文:Using Envoy to Load Balance gRPC ...

  3. 面试问题总结二(技术能力-PHP)----Ⅳ

    57.Linux 的基本命令(重点,现在多数服务器都是Linux 系统) 答:arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmid ...

  4. vue使用axios发送数据请求

    本文章是基于vue-cli脚手架下开发 1.安装 npm install axios --s npm install vue-axios --s 2.使用.在index.js中(渲染App组件的那个j ...

  5. SQL中MAX()和MIN()函数的使用(比较字符串的大小)

    在SQL数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助. 当需要了解一列中的最 ...

  6. 使用pyquery是遇到的一个403的问题

    在网上爬虫时,本地windows下运行pyquery代码正常,但是在linux下运行时一直报错 403 Forbidden.刚开始的代码如下 from pyquery import PyQuery a ...

  7. BZOJ3156 防御准备(动态规划+斜率优化)

    设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...

  8. Day24-part1-原生Ajax

    参考老师博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html 主要讲了:发数据的3种方式以及上传文件的3种方式.(后续需要总结) 一,原生Aj ...

  9. 【BZOJ1502】【NOI2005】月下柠檬树

    Portal 传送门 Solution 显然的是,每一个圆的影子,就是从树上的圆按光线方向平移至地面的圆.至于两个圆之间的连接部分,则是每两个在树上相邻的圆的,对应的影子圆的,公切线围起来的部分,如下 ...

  10. 第一章:CDib类库的建立

    VC++图像处理程序设计(第1版)    杨淑莹 编著     边奠英 主审 第一章 位图基础 Joanna-In-Hdu&Hust 手工打,印象更深刻 使用工具 VS2010 mfc  整本 ...