天天看點

iOS仿今日頭條滑動導航

iOS仿今日頭條滑動導航

一、viewcontroller的層次

用上面的圖來介紹,左側的個人頁面viewcontroller上面通過addchildviewcontroller添加了一個以mainviewcontroller為rootviewcontroller的

uinavigationcontroller,通過addsubview将uinavigationcontroller的view添加到個人頁面viewcontroller的view上。

二、仿今日頭條滑動導航主要有4個問題:

1.uipangesturerecognizer與scrollview的手勢沖突

- (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldrecognizesimultaneouslywithgesturerecognizer:(uigesturerecognizer *)othergesturerecognizer中根據gesturerecognizer傳回yes來使scrolview和uipangesturerecognizer都識别。

2.uipangesturerecognizer滑動結束的位置不正确

用uipangesturerecognizer滑動根據偏移量來改變uinavigationcontroller的view的位置,在今日頭條中滑動結束時uinavigationcontroller的view要麼在原位要麼在右側,不會停在中間,這個問題讓我想起了之前做的果凍效果,手勢有狀态state,根據手勢的狀态來改變uinavigationcontroller的view的位置,特别是在手勢結束時。

3.由于1使scrolview和uipangesturerecognizer都識别,導緻傳回時scrolview也會滑動

讓底部的scrolview能滑動的時間應該是uinavigationcontroller的view在初始位置frame的x為0,是以在它的frame的x>0時,底部的bottomscrollview scrollenabled=no。

4.頁面拖到右邊時點選右邊頁面可以滑到初始位置

首先時點選滑到初始頁面則需要給uinavigationcontroller的view添加輕點手勢,添加後就會與tableview的手勢沖突,是以有出現了一個新的bug,解決這個bug還比較好解決,因為bottomscrollview的scrollview隻有pan、pich手勢,tap手勢沒有,是以隻要設定tap輕點手勢的狀态就能解決. 在uinavigationcontroller的view的frame的x>0時,tap手勢的enable=no,==0時為yes即可(上周未将輕點加上,這周算是補上了,下面具體實作代碼我就不改了)。

三、 主要實作代碼(導航的代碼就不貼了,隻貼主要的)

1.聲明一個拖動手勢

2.為mainviewcontroller添加手勢

3.手勢識别的方法

4.手勢沖突解決

四、效果圖

iOS仿今日頭條滑動導航
iOS仿今日頭條滑動導航

繼續閱讀