對于iPhone用戶來說,右滑退出當(dāng)前頁面的手勢是再常用不過的了复颈。只不過對于系統(tǒng)原生來說傅瞻,只有在左側(cè)屏幕邊緣才有這個(gè)手勢,范圍太小了疼阔,因此很多APP都做了自己的邊緣滑動(dòng)退出的手勢戒劫,并且很多是全屏右滑退出的。但筆者最近在做這個(gè)手勢的時(shí)候卻出現(xiàn)了些問題(其實(shí)是項(xiàng)目的遺留問題了)婆廊。話多說不迅细,直接上圖!
支付寶和微信以及QQ等APP的右滑效果基本上都是這樣的淘邻,可以看到滑動(dòng)是很流暢的沒有任何問題茵典,下面再看看筆者接下的歷史遺留問題(嚴(yán)肅臉.jpg)。
額宾舅。统阿。。說實(shí)話贴浙,確實(shí)是有點(diǎn)挫砂吞。筆者也很奇怪,按道理來說右滑退出手勢無非就是攔截一下系統(tǒng)的邊緣手勢崎溃,然后對手勢進(jìn)行替換蜻直,代碼可以說是挺少的。網(wǎng)上也是一堆寫好的代碼,直接在工程中運(yùn)行應(yīng)該是沒問題的概而,但是呼巷,為什么會(huì)出現(xiàn)這個(gè)問題呢?
筆者試著比對了其他博主的代碼赎瑰,并沒有發(fā)現(xiàn)什么不同王悍。也有下載他們的框架demo,發(fā)現(xiàn)他們很多好像只是簡單的一個(gè)控制器跳轉(zhuǎn)到另一個(gè)控制器餐曼,然后再利用右滑退出压储,并沒有這種tabBarController為window根控制器的案例(難道他們項(xiàng)目框架都不用UITabBarController的嗎?)源譬。筆者還在一些博主的該話題文章下進(jìn)行了詢問集惋,得到的是“系統(tǒng)bug”。踩娘。刮刑。很絕望啊,系統(tǒng)bug养渴?不應(yīng)該吧雷绢。。理卑。
好吧翘紊,還是沒找到解決辦法。傻工。霞溪。不過在與一個(gè)同為開發(fā)的朋友交流后突然有了個(gè)疑問:會(huì)不會(huì)是視圖層級(jí)方面的問題呢?因?yàn)閺牡诙€(gè)圖中可以看出中捆,底部的tabBar好像是懸浮在最上面的鸯匹,但是,支付寶的卻是在下面的泄伪。為什么這樣呢殴蓬?好吧,還是不知道蟋滴。染厅。。不過津函,在無意間問了下朋友他的項(xiàng)目是怎樣搭建的時(shí)候突然好像找到了可以一試的解決方法肖粮。
筆者的項(xiàng)目是比較常見的搭建方式,window的根控制器是一個(gè)UITabBarController(簡稱為A)尔苦,有五個(gè)控制器a1,a2,a3,a4,a5涩馆,分別包裝為導(dǎo)航控制器行施,再作為子控制器被A添加。但是朋友說魂那,他的項(xiàng)目中window的根控制器是一個(gè)導(dǎo)航控制器Nav,Nav初始化的時(shí)候?qū)設(shè)為它的根控制器蛾号。a1,a2,a3,a4,a5直接作為A的子控制器添加不再包裝成導(dǎo)航控制器。嗯涯雅,確實(shí)不一樣鲜结,然后我就試了下,Duang活逆。精刷。。划乖。
嗯贬养,完美解決挤土。講道理琴庵,解決了歷史遺留問題的感覺真的是爽,哈哈仰美。
這個(gè)全屏右滑底部tabBar錯(cuò)位的問題算是解決了吧迷殿,只是筆者這里還有幾個(gè)問題:
1 為什么直接將A設(shè)為window的根控制器會(huì)有這個(gè)問題呢?這兩者有什么區(qū)別呢咖杂?
2 支付寶的右滑和底部的視圖也是有聯(lián)動(dòng)效果的庆寺,但是筆者的沒有,這個(gè)是怎么做到的呢诉字?
3 支付寶等只是靠近屏幕左側(cè)的一塊區(qū)域才有這個(gè)右滑手勢懦尝,并不是嚴(yán)格的全屏右滑,這個(gè)又是怎么做的呢壤圃?判斷手勢開始時(shí)的位置嗎陵霉?
聰明的你,趕快來告訴我把伍绳!謝謝啦踊挠。