全屏滑動(dòng)返回的實(shí)現(xiàn)

全屏滑動(dòng)返回功能的實(shí)現(xiàn):

1. 實(shí)現(xiàn)邊緣滑動(dòng)返回

默認(rèn)導(dǎo)航控制器都是有滑動(dòng)返回功能,由于我們自定義了控制器的返回按鈕,把系統(tǒng)的返回按鈕覆蓋, 所以此功能失效了

為什么失效呢? 是不是把手勢干掉了
我們進(jìn)入 UINavigationController 搜索 Gesture

找到第一個(gè)手勢interactivePopGestureRecognizer
打印此手勢

NSLog(“%@“, self .interactivePopGestureRecognizer);

得到以下結(jié)果

 <UIScreenEdgePanGestureRecognizer: 0x7fcf9bc7b3d0; state = Possible; delaysTouchesBegan = YES; view = <UILayoutContainerView 0x7fcf9bc6f120>;
target= <(action=handleNavigationTransition:,
target=<_UINavigationInteractiveTransition 0x7fcf9bc7afc0>)>>

所以手勢沒被干掉
并且
我們得到兩個(gè)信息: 該手勢的

target:UINavigationInteractiveTransition
action:handleNavigationTransition:

然后考慮是不是代理做了事情
看interactivePopGestureRecognizer手勢的代理,
就是這個(gè)UINavigationInteractiveTransition

我們把此手勢代理設(shè)置為nil , 發(fā)現(xiàn)可以實(shí)現(xiàn)滑動(dòng)返回
但是
在根控制器拖動(dòng)會(huì)發(fā)生死鎖 假死Bug

我們就把此手勢代理設(shè)置為導(dǎo)航控制器,

self.interactivePopGestureRecognizer.delegate = self; 

并調(diào)用代理方法 gestureRecognizer shouldReceiveTouch 是否觸發(fā)手勢
控制只有非根控制器才會(huì)觸發(fā)手勢:

 return self.childViewControllers.count > 1;

至此,就邊緣滑動(dòng)返回就完成了

2.實(shí)現(xiàn)全屏滑動(dòng)返回

在打印結(jié)果中, 進(jìn)入此手勢
UIScreenEdgePanGestureRecognizer
我們會(huì)發(fā)現(xiàn) 它 繼承自 UIPanGestureRecognizer
而且有一個(gè) UIRectEdge屬性, 進(jìn)去后發(fā)現(xiàn)它限定了邊緣
UIPan手勢是全屏的, 所以我們可以創(chuàng)建一個(gè)Pan手勢 ,
設(shè)置此手勢代理=self
然后把之前設(shè)置的代理注釋掉

//self.interactivePopGestureRecognizer.delegate = self;

讓Pan手勢調(diào)用 系統(tǒng)的滑動(dòng)返回方法該手勢的

target:UINavigationInteractiveTransition
action:handleNavigationTransition:

打印出的target就是interactivePopGestureRecognizer手勢的代理
我們用

id target =self.interactivePopGestureRecognizer.delegate 

把它取出

這樣創(chuàng)建的Pan手勢就可以初始化調(diào)用系統(tǒng)的滑動(dòng)返回方法了

最后禁用系統(tǒng)的邊緣滑動(dòng)

self.interactivePopGestureRecognizer.enabled =NO;

做法來自@崢吖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容