iOS自帶返回手勢在rootVC上右滑兩次導致頁面無法跳轉

前一段時間被提了個特別奇怪的bug:一個特別簡單的設置頁面,操作幾下之後無法跳轉到下一個頁面,然而我們這邊幾個開發都無法重現出來,後臺也抓不到任何crash報告。只能去測試那邊看怎麼復現,測試那邊也是不是次次都能重現出來,後來發現這個測試有個習慣,喜歡在頁面上隨意的左滑右滑,順着這個思路,果然重現了這個問題。

“頁面無法跳轉,肯定是主線程被阻塞了啊”,順着這個思路,我監控了一下線程,發現一切正常,並沒有被阻塞。

正當百思不得其解的時候,往左邊滑動了一下,發現那個新的VC被拖了出來,貌似是NV發生了錯亂。用debug view hierarchy看到有頁面確實跳轉過來了,但是不知道爲什麼手機上沒有顯示出來,仍然卡死在第一個頁面。如下圖的情況:






那應該就是在重寫右滑手勢的協議的時候有問題了,因爲項目中遇到有些UI會誤觸發右滑手勢,所以屏蔽了一些不觸發右滑返回的情況。然而現實是悲催的,就算全部屏蔽了我們自己的代碼,還是會出現這個問題,這時候問題就比較清晰了,直接在協議裏面判斷一下當前vc是不是rootvc,如果是直接返回NO,不響應手勢.(注:後期測試,如果自己不重寫協議不會出現這樣的問題。)


最後上代碼

self.interactivePopGestureRecognizer.delegate = self;

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    //判斷如果是當前VC是rootVC,直接不響應手勢
    if (self.viewControllers.count == 1 ) {
        return NO;
    }
    return YES;

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章