【转载请注明出处】

之前在看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. pygame学习笔记(3)——时间、事件、文字

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.运动速率    上节中,实现了一辆汽车在马路上由下到上行驶,并使用了pygame.time.delay(200 ...

  2. 一个Flume 异常(Put queue for MemoryTransaction of capacity 100 full)的排查和解决思路

    最近在做一个分布式调用链跟踪系统, 在两个地方采用了flume (我使用的flume版本是1.5.0-cdh5.4.4),一个是宿主系统 ,用flume agent进行日志搜集. 一个是从kafka拉 ...

  3. POJ1149_PIGS

    一共有n个猪圈,m个客人,一开始每个猪圈都有一定数量的猪猪.每个客人会打开一些猪圈,带走最多为某一个数量的猪猪,剩下的猪猪可以任意分配在这些开了的猪圈里面,然后重新关上.问所有的客人最多可以带走多少猪 ...

  4. 【题解】JSOI2009球队收益 / 球队预算

    为什么大家都不写把输的场次增加的呢?我一定要让大家知道,这并没有什么关系~所以 \(C[i] <= D[i]\) 的条件就是来卖萌哒?? #include <bits/stdc++.h&g ...

  5. 【刷题】HDU 6183 Color it

    Problem Description Do you like painting? Little D doesn't like painting, especially messy color pai ...

  6. phpredis -- Redis Arrays用法

    Redis Arrays 来自地址:https://github.com/phpredis/phpredis/blob/master/arrays.markdown#readme 扩展原文件array ...

  7. 单点登录(十一)-----遇到问题-----cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema na

    cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.sp ...

  8. bzoj 3667 Rabin-Miller算法

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i ...

  9. PHP正则表达式函数学习

    正则表达式是在日常开发中经常用到的,通常一些使用频率过高的正则表达式都是直接粘贴复制,对于基础正则的使用还是要铭记于心的,今天抽时间整理一些php正则表达式的用法. 一.php中常用的正则表达式函数 ...

  10. 题解【bzoj2653 middle】

    Description 给你一个序列,每次询问给出四个数 \(a,b,c,d\),求所有区间 \([l,r]\) 满足 \(l \in [a,b], r \in [c,d]\) 的中位数的最大值.强制 ...