UIControlEventTouchDown长按事件
由于公司要加聊天功能,于是乎屁颠屁颠的去集成了环信的EaseUI,结果发现语音,按住说话按钮按下去2秒之后才执行,妹的大问题啊,于是乎找同行翻博客愣是没找到解决办法,最后没办法只能自己手写一个聊天页面。哎哟喂!发现了一个有意思的事情,这个button只要放在试图控制器的最底部长按就有延迟,这种情况我是真的无法理解,于是改变了检索方向找到了这篇文章iOS11下底部长按手势的问题。
拷贝描述原因:
今天就从调整frame入手,把button放在scrollview上,一点一点拖动看效果,最终发现是距离底部大概30pt的地方,蜜汁反应慢。。突然一下清醒,拿来上古时代的iphone5一测试,哈哈,哈哈。就是跟iOS系统有关啊。。具体的就不说啦,相信大家都知道是iPhoneX的底部手势区域,还没去做iPhoneX适配的我就这样踩进了这么个巨坑!!
在iPhoneX上Home Indicator作为系统级别的手势,理论上不应该对非iPhoneX的iPhone手机造成影响,觉得这应该是被苹果所忽略的bug。但作为开发者怎么样也得把自己先把这个坑给填了。
解决办法很简单,WWDC 2017之后对UIKit在iOS系统下新增了一些API,下面这个值得注意
// Controls the application's preferred screen edges deferring system gestures when this view controller is shown. Default is UIRectEdgeNone.
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);
这个方法表明了屏幕边缘的手势动作(Screen Edge Gesture),一般来说都是由系统管理的,在控制器下重写这个方法,可以让自己的手势优先被调用,在这里的遇到的实际情况,我们应该使用UIRectEdgeBottom这个枚举值,问题完美解决😁
如果发现这个方法放到自己项目还是不好使,基本上可以确定是开启了侧滑返回手势导致的,会发现屏幕的中间以左的底部区域还是无法正常工作,目前还没有完整的解决方案,可以考虑先禁用掉当前页面的返回手势,也同样能解决问题,看如何取舍吧,当然其他小伙伴有招的也可以支个招,毕竟此种方法也是指标不治本
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
如果你想保留侧滑 又想解决这个问题不妨试试这个
self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan=NO;