ios转到miui,怎么没有ios 禁止滑动返回回

经验410 米
在线时间48 小时
版本5.9.24
积分 516, 距离下一级还需 1484 积分
积分 516, 距离下一级还需 1484 积分
机型小米手机2/2S
签到次数27
MIUI版本5.9.24
通过手机发布
返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图19.png 返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图20.png
设置完毕后,打开任意应用,从屏幕边缘滑动感受 SwipeBack 带来的快感吧!值的注意的是,SwipeBack 的「底部」触发区域并非指「屏幕底部」,而是「应用底部」。因此使用 Neuxs 等内置虚拟按键设备的同学并不用担心误操作问题,在虚拟按键上面一点的位置滑动即可。
返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图40.png 返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图51.png
尽管如此,但笔者依旧不建议大家将触发区域设置为底部。由于屏幕尺寸的增长以及握姿的影响,一般情况下,用户手指的操作热区应该是集中在屏幕下方。若将触发区域设置为底部,在刷微博/浏览网页时就很有可能误操作返回到上级界面,从而打乱用户操作连贯性。
支援黑名单功能
对于上文所提及到的误操作问题,除了更改触发区域外,我们还可以将一些与滑动返回不兼容的应用放至在黑名单上。如此一来,既能使用便捷的全局滑动返回,又不影响原有应用的正常操作。
返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图38.png 返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图44.png
应用介绍完毕后,文章顺带反馈一下目前 SwipeBack 所存在的 Bug 。
1. 在应用根目录下,使用 SwipeBack 滑动返回所触发的操作是「结束应用」而非「返回到桌面/最小化」,这点在手机 QQ 与新浪微博上体现得尤为明显。笔者曾尝试使用App Settings 将微博、微信等常用应用设置为常驻内存,但依旧无果。
2. 在 SwipeBack 生效时,原生支持手势返回的应用动画会被强制性替换,从而造成过渡动画丢失、点击返回键却出现与操作不符的过渡动画等。这点在「滑动监听边缘」设置为「底边、右边」的时候尤为明显。
返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图22.png 返回键最佳继承者:SwipeBack 滑动返回 - 豌豆荚截图04.png
返回键最佳「继承者」
得益于全局通用的强大手势,对于一些至今还不支持滑动返回的应用,特别是返回按钮还放置在左上角的「出土文物」,SwipeBack 确实是个非常出色的「外挂」。
总的来说,在诞生的初期就能将功能做的如此完善,确实非常难得。虽然还不足以完全取代返回键,但它的出现确实很好缓解了目前Android 大屏操作的窘境,期待下一次更新!
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
在线时间9 小时
版本3.9.27
积分 67, 距离下一级还需 133 积分
积分 67, 距离下一级还需 133 积分
机型Samsung I9500
MIUI版本3.9.27
经验15379 米
在线时间320 小时
版本8.1.22
MIUI首席体验官
机型红米Note 4 / 红米Note4X MTK平台
签到次数175
MIUI版本8.1.22
在应用根目录下,使用 SwipeBack 滑动返回所触发的操作是「结束应用」而非「返回到桌面/最小化」,这非常不好,到现在了,还没修复,估计作者放弃了
2018新年勋章
参与回帖活动
2017圣诞节勋章
参与回帖活动
MIUI3亿用户纪念勋章
参与回帖活动
感恩节勋章
参与回帖活动
万圣节勋章
参加回帖活动
米兔月饼勋章
参加回帖活动
MIUI七夕鹊桥勋章
MIUI七周年
MIUI 9纪念勋章
小米7周年勋章
2017米粉节晒单赢专属勋章
“澎湃S1 ”芯片纪念勋章
参与活动回帖可得
参与红米Note 4X活动
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
MIUI 300周
MIUI 300周更新纪念勋章
小米六周年
小米六周年米粉节
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
MIUI三周年
MIUI三周年纪念勋章
已关注极客秀微信
已关注微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号iOS 滑动返回手势与滚动视图手势冲突问题 - 简书
iOS 滑动返回手势与滚动视图手势冲突问题
最近项目中有一个聊天的页面,不是本人做的,其中键盘视图有一个自己的表情视图,这个选择表情的视图是一个滚动视图,如果在向右滑动表情的滚动视图的时候,滑动的位置太靠右的话,就会触发UINavigationController的向右滑动返回,整个聊天页面就会pop掉了。为了避免这种冲突,我们需要对滚动视图的手势和边缘触发返回的手势进行处理。
首先,看API的话,会发现滚动视图的一个属性,也就是滚动视图滑动的手势;
@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);
然后,手势的话,有一个可以解决这个问题的API方法,这个方法我在网上查,理解就是,如果otherGestureRecognizer这个手势没有执行成功的话,才会执行调用这个方法的手势。
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureR
再然后,我们需要获取这两个本来会发生冲突的手势:
1.滚动视图的手势就不用多说了,用属性的getter取就好了:
self.scrollView.panGestureR
2.边缘返回的手势,用一个方法就可以获取到:
- (UIScreenEdgePanGestureRecognizer *)screenEdgePanGestureRecognizer
UIScreenEdgePanGestureRecognizer *screenEdgePanGestureRecognizer =
if (self.navigationController.view.gestureRecognizers.count & 0) {
for (UIGestureRecognizer *recognizer in self.navigationController.view.gestureRecognizers){
if ([recognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
screenEdgePanGestureRecognizer = (UIScreenEdgePanGestureRecognizer *)
return screenEdgePanGestureR
最后,我们用手势的requireGestureRecognizerToFail:这个方法来处理这两个手势就好了:
[[self screenEdgePanGestureRecognizer] requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];
也就是说,我们在操作滚动视图的时候的,只要滚动视图的手势能够触发,就不会执行滑动返回的那个手势,并且除了这个滚动视图外,在其他地方对滑动返回没有影响。
第一次写技术型的笔记,没有什么经验,所以大家多多提意见,如果内容写的不对的,误导性的,也请慷慨指出,肯定会虚心更正的。
看书,敲代码,现在还差一只猫?
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视图 集合视图是用灵活的和可变的布局来显示有序的数据项集合的一种方式。最常用来显示类似网格布局的项,但在iOS中不仅仅只能用来显示行和列。在集合视图中,通过继承可...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
手势识别器是附加到视图的对象,将低级别事件处理代码转换为更高级别的操作,它允许视图以控件执行的方式响应操作。 手势识别器解释触摸以确定它们是否对应于特定手势,诸如滑动,捏合或旋转,如果识别他们特定的手势,他们发送动作消息到目标对象。 目标对象通常是视图的控制器,它响应手势,...
小鹿所说的男人无能,指的是在一段婆媳关系中,男人自己没有办法维护好母亲和妻子之间相处的平衡,从而让自己家里的这段婆媳关系面对更多的威胁。这个是有也许会有一些男人站出来说,自己被夹在中间很受气,但是一边是生我养我的母亲,另一边是爱我懂我而且将来会跟我相伴一生的妻子,手心手背都...
《在人生拐角处》通过多个事例说明了不同情况的人遭遇到了不同的迷茫,从这些人中或多或少也看到了自己的影子。 有的人只是因为职场上的一些问题而选择离开,如果是这种情况,就需要你剖析现在的职场环境,因为哪些因素需要离开,这些因素能否经过努力得到改善。 有的人急于改变自己,参加各种...
http://www.liaoxuefeng.com/wiki/958fa6d3a2e542c000/83175eeea92a8b0439fab7b392a8a32f8fa000 Pyt...
十七岁那年,我和班里另外两名男生幸运地考入了德惠第一中学,也非常荣幸地同时分到了重点班。从此,开始了艰苦的高中生活,也开启了我人生中最快乐的岁月。
我们八九年入学,教室都是平房,只有寝室一栋楼。冬天教室里生地炉,每个学生要交十四斤的豆棍。最有趣的是,每次回到离县城四...
鉴定你是否还喜欢一个人最好的方法就是,离开他之后你又遇见了A君B君C君D君他们都比他优秀,温柔,当然对你更好,但是你对新的感情始终无法全身心的投入,之后的每一段感情都无疾而终。 一个小时前我想吃玉米,但是因为冷我不想出去所以吃了包薯片。半个小时前我又想吃玉米于是我又吃了一个...2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。经验161 米
在线时间31 小时
版本6.5.27
积分 189, 距离下一级还需 11 积分
积分 189, 距离下一级还需 11 积分
机型小米手机4
签到次数17
MIUI版本6.5.27
通过手机发布
希望加入全局滑动返回手势& &像iPhone一样& & 确实是高频手势& &并且在小米四&&note一类的大屏手机&&会有更好的用户体验& &因为MIUI的界面布局返回一般是在左上角这样就很难到手触及到& &而虚拟按键返回又是在掌心处&&更不好单手操作& &&&
比如微信的滑动返回就非常用的顺手&&建议添加
(99.62 KB, 下载次数: 0)
09:10 上传
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验9544 米
在线时间1217 小时
机型小米手机1/1S
签到次数209
MIUI版本8.1.2
感谢建议,这个手势一方面会和切换tab滑动有冲突,一方面确实android上实现有问题,希望以后有机会能用其他的方式实现(我们也在尝试ing)
MIUI官方微博:&&&&
经验16787 米
在线时间529 小时
版本7.11.21
机型小米Note2
签到次数157
MIUI版本7.11.21
通过手机发布
M这个会和软件发生勿触吧
经验2974 米
威望242 米
在线时间902 小时
版本7.11.16
机型红米手机2 联通版/电信版
签到次数77
MIUI版本7.11.16
通过手机发布
会和软件冲突
经验3581 米
在线时间28 小时
版本7.11.16
积分 3679, 距离下一级还需 1321 积分
积分 3679, 距离下一级还需 1321 积分
机型小米Note
签到次数80
MIUI版本7.11.16
这个想法不错
经验7424 米
在线时间370 小时
版本8.1.24
机型小米手机6
签到次数115
MIUI版本8.1.24
好,支持……不过不知道会不会开发
经验1521 米
在线时间25 小时
版本7.11.2
积分 1559, 距离下一级还需 441 积分
积分 1559, 距离下一级还需 441 积分
机型小米手机4
签到次数58
MIUI版本7.11.2
通过手机发布
经验1840 米
在线时间69 小时
版本8.1.10
机型小米MIX 2
签到次数69
MIUI版本8.1.10
默默的说不做好像是因为iPhone有专利 没法做
经验5230 米
在线时间318 小时
版本8.1.23
机型小米手机6
签到次数120
MIUI版本8.1.23
会和软件冲突
系统软件支持滑动返回即可,第三方软件可以自动适配
经验790 米
在线时间68 小时
版本V6.4.3.0.KHJCNCB
积分 1129, 距离下一级还需 871 积分
积分 1129, 距离下一级还需 871 积分
机型红米手机2 联通版/电信版
MIUI版本V6.4.3.0.KHJCNCB
功能还是很好用的
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI 100周
100周发布纪念勋章
万圣节勋章
参加回帖活动
米兔月饼勋章
参加回帖活动
MIUI七周年
MIUI 9纪念勋章
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
已关注微信
已关注极客秀微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI六周年
MIUI六周年纪念勋章
2018新年勋章
参与回帖活动
2017圣诞节勋章
参与回帖活动
感恩节勋章
参与回帖活动
MIUI七夕鹊桥勋章
小米7周年勋章
2017米粉节晒单赢专属勋章
2017年小金鸡勋章
回复2016年度评选活动贴
圣诞节勋章
参与圣诞活动
全局搜索纪念勋章
参加全局搜索内测
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号iOS 7 滑动返回那些事儿
.entry-meta
.entry-header
在智能机越来越普及,屏幕越做越大的当下,滑动返回手势已经成为了一个应用的标配功能,甚至可以说,不能滑动返回是一种反人类的交互体验。
滑动返回现在大致有以下3种类型:
1 使用 UISwipeGestureRecognizer 实现,效果为用户在屏幕中向右轻扫手指,页面返回。
2 使用 UIPanGestureRecognizer 实现,效果为用户在屏幕中向右滑动手指,松开后页面返回。
3 使用 iOS 7 提供的滑动返回实现,效果为用户手指从屏幕外由左向右进入屏幕,松开后页面返回。
前两种实现方式是 iOS 7 推出之前的普遍做法,现在来看,已经过时且体验不佳,个人推荐使用第三种,优点如下:
& 良好的交互与动画效果
& 系统级的支持,实现简单,代码清晰
& 不会与一些屏幕内的手势产生冲突
虽然优点很明显,但是在使用过程中,还是会有一些值得我们注意的问题,接下来我们就一一解决它们。
1. 如何设置自定义的返回按钮图片?
如果我们的返回按钮不需要显示文字,或者显示的文字是固定的,可以做到图片中去,那么我推荐通过设置 iOS 7 新引入的 backIndicatorImage 来自定义返回按钮。代码如下:
Crayon Syntax Highlighter v2.6.4
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
[UINavigationBar appearance].backIndicatorImage =
[UINavigationBar appearance].backIndicatorTransitionMaskImage =
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
[UINavigationBar appearance].backIndicatorImage =
[UINavigationBar appearance].backIndicatorTransitionMaskImage =
[Format Time: 0.0036 seconds]
这样设置后会发现图片被渲染成 navigationBar 的 tintColor 的颜色了,要怎样才能显示出原始的图片颜色呢?还需要用到 iOS 7 中 UIImage 的一个新属性 renderingMode。 我们需要生成一张 renderingMode 为 UIImageRenderingModeAlwaysOriginal 的图片,让我们加上这行代码:
Crayon Syntax Highlighter v2.6.4
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[UINavigationBar appearance].backIndicatorImage =
[UINavigationBar appearance].backIndicatorTransitionMaskImage =
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[UINavigationBar appearance].backIndicatorImage =
[UINavigationBar appearance].backIndicatorTransitionMaskImage =
[Format Time: 0.0018 seconds]
这样我们的图片就能显示出原始的颜色了。
2. 使用 UIButton 自定义返回按钮后,如何使用系统的滑动返回?
当我们的返回按钮上需要显示不同的文字时,就不能使用 backIndicatorImage 了,我们要自定义一个 UIButton 来生成 UIBarButtonItem,再设置 navigationBar 的 leftBarButtonItem。而如果设置了 leftBarButtonItem 的话,会使系统的滑动返回失效。我们需要在 UIViewController 中加入这行代码
Crayon Syntax Highlighter v2.6.4
self.navigationController.interactivePopGestureRecognizer.delegate =
self.navigationController.interactivePopGestureRecognizer.delegate =
[Format Time: 0.0007 seconds]
运行起来一看,恩&可以滑动返回了。
3. 怎样让滑动返回像默认的效果一样容易触发?
玩了一会儿你发现,好像哪里不对劲,怎么不如之前容易触发了?
没错,当设置了 navigationController.interactivePopGestureRecognizer.delegate 后,虽然滑动返回恢复了,但是它却有点&残疾&,具体表现为两点:
1 手指滑动的角度必须要几乎水平,而正常的效果可以接受差不多30度的偏差,这在实际使用过程中的体验差别是非常巨大的。
2 如果 UIViewController 中是一个 UITableView 或者其他可滚动的 UIScrollView,那么在 UIScrollView 滚动的时候,是不能触发滑动返回的,而正常的效果是可以触发的。
那么,我们该怎样解决这两个问题呢?
我们差不多能猜到是因为手势冲突导致的,那我们就先让 ViewController 同时接受多个手势吧。加上代码:
Crayon Syntax Highlighter v2.6.4
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
& & return YES;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
&&&&return YES;
[Format Time: 0.0013 seconds]
运行试一试,两个问题同时解决,不过又发现了新问题,手指在滑动的时候,被 pop 的 ViewController 中的 UIScrollView 会跟着一起滚动,这个效果看起来就很怪(知乎日报现在就是这样的效果),而且也不是原始的滑动返回应有的效果,那么就让我们继续用代码来解决吧。
Crayon Syntax Highlighter v2.6.4
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
& & return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
&&&&return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
[Format Time: 0.0014 seconds]
加上这段代码后,系统的 UIScreenEdgePanGestureRecognizer 就不会与其他的手势同时触发,从而解决了这个看起来有点奇怪的效果。
4. 其他若干小问题
让我们继续玩儿啊玩儿,还会遇到哪些问题呢?
1 当在 UINavigationController 的 rootViewController 中做一个会触发滑动返回的操作后,再点击某个会 pushViewController 的按钮时, UINavigationController 没有任何反应,而如果使用 home键 返回主屏,再进入应用的话,会发现已经 push 进刚才应该进入的 ViewController 了,这是因为在 UINavigationController 的 rootViewController 中触发了滑动返回导致的,我们只要判断一下当前 ViewController 是否是 rootViewController,然后在 - gestureRecognizerShouldBegin: 中返回就可以了。
2 如果我们在 pushViewController 的动画过程中触发滑动返回,会导致闪退,处理方式也很简单,在 push 之后禁用 interactivePopGestureRecognizer, 在 ViewController 显示之后恢复 interactivePopGestureRecognizer 就可以了。我使用了 swizzling 方式在 Category 中统一处理。
我将一份 Demo 放到了 Github 上,欢迎大家下载。
阅读(...) 评论()

我要回帖

更多关于 ios 滑动返回 的文章

 

随机推荐