【转载请注明出处】

之前在看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. Sql Server中判断表、列不存在则创建的方法[转]

    一.Sql Server中如何判断表中某列是否存在 首先跟大家分享Sql Server中判断表中某列是否存在的两个方法,方法示例如下: 比如说要判断表A中的字段C是否存在两个方法: 第一种方法  ? ...

  2. [转帖]通俗解释 AWS 云服务每个组件的作用

    你有听说过 ContainerCache,ElastiCast 和 QR72 这些 AWS 的新服务吗? 没有就对了,这些都是我编的:) 不过,AWS 有 50 多个服务,从名称也不能看出这些服务是做 ...

  3. [PPT] PPT 录制视频功能.

    1. 需要PPT 里面增加进截图, 发现还不如 直接插入视频合理 本来想了一种方式是 使用 screen to gif 的工具 生成gif 来处理. 后来 发现ppt 里面自带一个 屏幕录制功能. 2 ...

  4. jQuery : 有关TypeError: invalid ‘in’ operand obj的错误

    参考 lwx2615 的博客 ,网站:  http://blog.csdn.net/lwx2615/article/details/9668777 由PHP返回一个json数据 $.ajax({ ur ...

  5. 对比数据库字段不同的sql (mysql版)

    -- 使用test库 `test_project_management` `oel_project_management` USE test; -- 旧表 DROP TABLE old_column_ ...

  6. [OS] 内核态和用户态的区别

    http://blog.csdn.net/fatsandwich/article/details/2131707# http://jakielong.iteye.com/blog/771663 当一个 ...

  7. BAT等公司必问的8道Java经典面试题,你都会了吗?

    工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1.“知其然不知其所以然”.做了多年技术,开发了很多业务应用,但似乎并 ...

  8. python3+selenium3+requests爬取我的博客粉丝的名称

    爬取目标 1.本次代码是在python3上运行通过的 selenium3 +firefox59.0.1(最新) BeautifulSoup requests 2.爬取目标网站,我的博客:https:/ ...

  9. linux eclipse add desktop shortcut with root permission

    gedit ~/.local/share/applications/opt_eclipse.desktop sudo apt-get install gksu [Desktop Entry] Type ...

  10. 【题解】玲珑杯河南专场17B

    容斥大法妙~其实网上很多的题解虽然给出了容斥系数,但是并没有说明为什么是这个样子的.在这里解释一下好了. 考虑用容斥,实际上就是让 \(ans = \sum_{T\subseteq S}^{\ }f_ ...