關(guān)于滑動(dòng)返回手勢(shì)新發(fā)現(xiàn)

相信對(duì)于滑動(dòng)返回手勢(shì)大家都不會(huì)陌生了,不就是導(dǎo)航控制器自帶的滑動(dòng)返回手勢(shì)嘛,系統(tǒng)自帶的功能。當(dāng)自定義導(dǎo)航條的返回按鈕的時(shí)候,再自己定義一下滑動(dòng)返回手勢(shì)的代理,然后為了解決假死問題,實(shí)現(xiàn)一個(gè)返回BOOL值的代理方法,如果是導(dǎo)航控制器的跟控制器就返回NO,否則返回YES。代碼如下:

//這里的協(xié)議是 UIGestureRecognizerDelegate
self.interactivePopGestureRecognizer.delegate = self;

//<UIGestureRecognizerDelegate>協(xié)議中的方法
//為了解決假死問題實(shí)現(xiàn)的代理方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
//如果子控制器只有一個(gè),就是根控制器,就不要讓左滑返回有效了
    return (self.childViewControllers.count >1);
}

以上內(nèi)容相信大家都是非常熟悉的了,所以在這里就不再繼續(xù)討論了。

但是通過以上代碼實(shí)現(xiàn)的滑動(dòng)返回時(shí)候只能是手指在屏幕邊緣滑動(dòng)才會(huì)生效,一個(gè)如此不方便的滑動(dòng)返回手勢(shì)其實(shí)相當(dāng)雞肋的(我更多時(shí)候?qū)幵更c(diǎn)擊返回按鈕)。
不過如果這個(gè)手勢(shì)的有效范圍擴(kuò)大到整個(gè)的屏幕的話,那就大大不同了,那么現(xiàn)在就一起來看看如何實(shí)現(xiàn)整個(gè)屏幕范圍有效的滑動(dòng)返回手勢(shì)吧,其中相當(dāng)一部分代碼我本人表示看不懂,如有明白其中緣由的網(wǎng)友也希望能夠請(qǐng)分享一下給大家。以下就是代碼實(shí)現(xiàn):

UIScreenEdgePanGestureRecognizer *gesture = (UIScreenEdgePanGestureRecognizer *)self.interactivePopGestureRecognizer;
    
    gesture.enabled  = NO;
  
    NSMutableArray *targets = [gesture valueForKeyPath:@"_targets"];

    id gestureTarget = [targets firstObject];
    
    id target = [gestureTarget valueForKeyPath:@"_target"];
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
    
    [gesture.view addGestureRecognizer:pan];

到這里,就可以實(shí)現(xiàn)滑動(dòng)返回手勢(shì)了,但是這時(shí)候你會(huì)沮喪地發(fā)現(xiàn)煩人的假死問題又出現(xiàn)了,雖然這種情況下的假死問題并不嚴(yán)重,通過對(duì)屏幕一頓猛拖猛點(diǎn)還是可以恢復(fù)的,但也足以讓人抓狂。
如何解決假死問題呢?以下代碼是上面代碼的后續(xù):

##注意,這里下面的代碼是連接著上面一段的代碼。
//這里遵守的協(xié)議是 UIGestureRecognizerDelegate
    gesture.delegate = self;

//<UIGestureRecognizerDelegate>協(xié)議中的方法
//為了解決假死問題實(shí)現(xiàn)的代理方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{//如果子控制器只有一個(gè),就是根控制器,就不要讓左滑返回有效了  
      return (self.childViewControllers.count >1);
}

加上上述代碼之后,便可以暢心地使用滑動(dòng)返回手勢(shì)了,從此表示再也不點(diǎn)左上角的返回按鈕了!

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,406評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,098評(píng)論 25 709
  • 大峽谷位于恩施州建始縣景陽鎮(zhèn)段云霧繚繞,奇石,瀑布蝴蝶巖分布其中,風(fēng)景如畫等。
    寧靜港灣_6cee閱讀 377評(píng)論 0 0
  • 在佛的面前你枯萎在梵音檀香之間那一杯清水里 在墓碑之前你凋謝于人間思念情憂那朝露晚風(fēng)里 在田原曠野你淡淡飄零在四季...
    紅塵久客閱讀 794評(píng)論 18 15
  • 在表達(dá)感激時(shí),我們說出:(1)對(duì)我們有益的行為;(2)我們的哪些需要得到了滿足;(3)我們的需要得到滿足后,我們是...
    Fly_Catkin閱讀 171評(píng)論 0 0

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