App卡顿 不响应点击事件(自定义导航栏)
2017-06-19 本文已影响27人
Misaki_yuyi
最近遇到一个奇怪的问题:APP使用一段时间会变得非常卡,包括点击页面事件不响应。有一个明显的现象是切换到后台,再回到前台,APP会响应之前的一个响应事件,然后卡住了。当时的反应是,应该是有比较耗时的操作在阻塞主线程。但是没有发现有阻塞主线程的操作,请求都是异步的,只有在applicationDidBecomeActive里面调用了一个APP计数的接口。但是在注释这个接口后,APP仍然卡顿。
后来查资料才发现是右滑手势的坑。先交代一下环境。
APP在基类把系统的NavigationBar 给隐藏了,然后自定义一个UINavigationBar类贴在原来的NavigationBar上。后来为了实现右滑返回手势,写了这样一行代码:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
之前也没有多想。四个根页面都会相应右滑手势,但是又不能返回上一个页面,造成了卡顿现象。
解决方法:在四个根页面的viewDidAppear 方法里禁用手势
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
然后在pushViewController的时候,再将手势放开:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
APP响应事件卡顿的问题正式解决。