最近遇到一個奇怪的問題: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響應事件卡頓的問題正式解決。