关于interactivePopGestureRecognizer的两个坑

最近连着两个版本被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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 objc.io objc.io 是关于 Objective-C 最佳实践和先进技术的期刊,欢迎来到第一期! ...
    评评分分阅读 5,667评论 5 24
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,262评论 25 709
  • 少无适俗韵,性本爱丘山。 误落尘网中,一去三十年。 羁鸟恋旧林,池鱼思故渊。 开荒南野际,守拙归园田。 方宅十余亩...
    灯下一粒尘阅读 2,372评论 0 0
  • 会有那么一天 你会脱掉你爱的帆布鞋, 穿上 漂亮的高跟鞋 ,优雅的走在路上 会有那么一天 你会盘起发...
    2小小阅读 2,865评论 0 2
  • 板凳君出差在外,打电话回来,对我的写作表示墙裂支持,说我进步很大,同时又表示我写的太多了,文风太犀利了,不够温...
    wyf方圆阅读 3,437评论 0 0