美文网首页技术文档仓前iOS研究组
关于interactivePopGestureRecognize

关于interactivePopGestureRecognize

作者: 阿呆少爷 | 来源:发表于2016-03-09 21:50 被阅读5480次

最近连着两个版本被interactivePopGestureRecognizer坑,真的是被坑死了。

界面卡死的问题

这个问题查好了好几个晚上。表现是在root view controller乱滑时,容易卡死,进入后台一下再回来又会正常。

做了各种尝试,排查了动画、内存和基础组件等可能的原因,无果。在近乎绝望的情况下,突然灵光一现,想起自己重构代码时,删除了几行关于导航代理的代码。

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
   if (viewController == navigationController.viewControllers[0])
   {
       navigationController.interactivePopGestureRecognizer.enabled = NO;
   }else {
       navigationController.interactivePopGestureRecognizer.enabled = YES;
   }
}

显示root view controller时,关闭掉interactivePopGestureRecognizer这个手势。

按钮点击无反应问题

为了提高灵活性,来往支持view controller关闭右滑手势。为了提高性能,我用gestureRecognizerShouldBegin替换了shouldReceiveTouch。结果引入了一个我意想不到的bug。

点击发语音消息的按钮,反映迟钝。经过无数种尝试,我发现了一些规律,按钮如果在底下的时候,左半边点击响应迟钝,右半边却很灵敏。但是在别的地方一直都会很灵敏。我重点排查了view controller和输入框上别的手势,清空所有的手势依旧如此。

很难想象这是导航栏的手势导致的。触点在输入框不灵敏的区域时,如果能在shouldReceiveTouch快速返回NO的话,点击就非常灵敏了。

@interface NavigationController : UINavigationController <UINavigationControllerDelegate, UIGestureRecognizerDelegate>

@end

@implementation NavigationController

- (id)initWithRootViewController:(UIViewController *)rootViewController
{
    self = [super initWithRootViewController:rootViewController];
    
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
 
    self.interactivePopGestureRecognizer.delegate = self;
}

#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch
{
    //如果在红色方框内有长按手势,这里需要快速返回NO,要不然反映会很迟钝。
    return YES;
}

@end

这种情况下点击按钮毫无压力,非常灵敏。


Snip20150402_52

这种情况下,按住红色方框区域,按钮会迟迟收不到touchesBegan,按钮不会进入highlighted状态。


Snip20150402_51

相关文章

  • 关于interactivePopGestureRecognize

    最近连着两个版本被interactivePopGestureRecognizer坑,真的是被坑死了。 界面卡死的问...

  • 一句代码搞定 导航返回全屏手势

    [self.navigationController.interactivePopGestureRecognize...

  • 使用interactivePopGestureRecognize

    记录一次小问题 苹果在iOS7的UINavigationController中加入了一个返回手势--interac...

  • iOS-快速解决scrollView导致无法右滑pop的问题

    在viewDidLoad添加一下代码即可: // 更换interactivePopGestureRecognize...

  • 关于关于关于

    他们爱他们自己,不爱你 他们爱你是他们的母亲妻子女儿姐妹 他们不爱你 直到你死的时候,爱才产生,与遗忘同时 那也不...

  • 光明人生

    关于出生 关于成长 关于求学 关于青春期 关于恋爱 关于择业 关于婚姻 关于养生 关于家庭 关于人际 关于教子 关...

  • 「梦雅的简动力」打卡计时65天

    * 关于人生 * 关于梦想 * 关于方向 * 关于创业 * 关于投资 * 关于成败 * 关于个性 * 关于高度 *...

  • 关于

    关于两个人? 关于100步? 关于回头? 关于深情? 关于家庭? 关于孩子? 关于成长? 关于伤痛? 关于怀抱? ...

  • 2017新手妈妈年终总结

    关于购物 关于体重 关于减肥 关于纪念日 关于生活态度 关于上班 关于职场晋升加薪 关于睡眠 关于抱孩子 关于发型...

  • 2018-11-28

    关于流浪、关于随心、关于自由、关于世俗、关于规则、关于坦诚、关于真我、关于好奇心、关于对这整个世界的态度、关于整个...

网友评论

  • LightReason:我也尝试添加了你所在代理写的,可是仍然会出现卡死。
    我的问题是这样的,每当我push过去,然后用手势pop回来,反复这样操作几次,就会在手势pop的时候出现卡死,回到后台再点击一个交互事件就会崩溃。不明白哪里出现问题了,,,,,,,,,,
    阿呆少爷:@触碰阳光521 太好啦,我当时也折腾了好久:smile:
    2a1063eb9fb4:我今天遇到这个问题,我可以说我找了将近十天才发现,快崩溃了,还好解决了
    阿呆少爷:@LightReason 仔细检查一下代码,是不是哪里出问题了,在第一个VC的viewDidAppear里面打印一下self.navigationController.interactivePopGestureRecognizer.enabled,确认是否真的关闭了。

本文标题:关于interactivePopGestureRecognize

本文链接:https://www.haomeiwen.com/subject/luhtlttx.html