最近遇到一個(gè)奇怪的問題:APP使用一段時(shí)間會變得非常卡员咽,包括點(diǎn)擊頁面事件不響應(yīng)毒涧。有一個(gè)明顯的現(xiàn)象是切換到后臺,再回到前臺贝室,APP會響應(yīng)之前的一個(gè)響應(yīng)事件链嘀,然后卡住了。當(dāng)時(shí)的反應(yīng)是档玻,應(yīng)該是有比較耗時(shí)的操作在阻塞主線程。但是沒有發(fā)現(xiàn)有阻塞主線程的操作茫藏,請求都是異步的误趴,只有在applicationDidBecomeActive里面調(diào)用了一個(gè)APP計(jì)數(shù)的接口。但是在注釋這個(gè)接口后务傲,APP仍然卡頓凉当。
后來查資料才發(fā)現(xiàn)是右滑手勢的坑。先交代一下環(huán)境售葡。
APP在基類把系統(tǒng)的NavigationBar 給隱藏了看杭,然后自定義一個(gè)UINavigationBar類貼在原來的NavigationBar上。后來為了實(shí)現(xiàn)右滑返回手勢挟伙,寫了這樣一行代碼:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
之前也沒有多想楼雹。四個(gè)根頁面都會相應(yīng)右滑手勢,但是又不能返回上一個(gè)頁面,造成了卡頓現(xiàn)象贮缅。
解決方法:在四個(gè)根頁面的viewDidAppear 方法里禁用手勢
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
然后在pushViewController的時(shí)候榨咐,再將手勢放開:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
APP響應(yīng)事件卡頓的問題正式解決。