iOS 多個(gè)滑動(dòng)視圖嵌套的手勢(shì)觸摸處理
實(shí)現(xiàn)思路

界面設(shè)計(jì)
-
前提條件:
- 頁(yè)面構(gòu)成: 整體頁(yè)面為一個(gè)滑動(dòng)視圖, 其中最上方為類(lèi)似 header 并且包含一個(gè) SegementView 的視圖, 下方為多個(gè)并列的 TableView 或者 ScrollView 視圖
- 頁(yè)面需求: 當(dāng)滑動(dòng)下方的視圖時(shí)需要讓 header 跟隨滑動(dòng)直到滑動(dòng)到 segement 時(shí)停止滑動(dòng), 接下來(lái)就只能滑動(dòng)下方的 tableview 并且可以無(wú)限加載數(shù)據(jù)以及橫向切換 tableview , 當(dāng)向下滑動(dòng)的時(shí)候, 如果滑動(dòng)到最頂層的時(shí)候 header 會(huì)跟隨出現(xiàn).
-
實(shí)現(xiàn)思路分析
- 通過(guò)監(jiān)聽(tīng)最外層的 ScrollView 的偏移量, 對(duì)其 ScrollEnable 屬性進(jìn)行更改, 使滑動(dòng)手勢(shì)的作用對(duì)象不同, 實(shí)現(xiàn)需求.
- 通過(guò)重寫(xiě)每個(gè)視圖的 hitTest 函數(shù)操作響應(yīng)實(shí)現(xiàn).
- 監(jiān)聽(tīng)最外層 ScrollView 的偏移量, 通過(guò)設(shè)置固定的偏移量來(lái)保證響應(yīng)手勢(shì)的切換.
-
實(shí)驗(yàn)結(jié)果
- 可以實(shí)現(xiàn)需求, 但是因?yàn)?ScrollEnable 屬性更改之后需要二次滑動(dòng)才能切換滑動(dòng)響應(yīng)視圖, 因此, 方案放棄.
- hitTest 函數(shù)的響應(yīng)時(shí)機(jī)只有手指觸摸時(shí)的第一下, 因此實(shí)現(xiàn)過(guò)程太復(fù)雜, 放棄.
- 這個(gè)方法不是我想出來(lái)的, 而是在查找資料的時(shí)候發(fā)現(xiàn)的大神思路, 此處放鏈接, 最終證實(shí)有效, 完美解決問(wèn)題.
具體實(shí)現(xiàn)
寫(xiě)在最后
最終完成后, 還是有個(gè)疑問(wèn), 同時(shí)存在兩個(gè)滾動(dòng)視圖, 如果一個(gè)滾動(dòng)視圖的偏移量確定, 那么滑動(dòng)手勢(shì)就會(huì)作用在另一個(gè)滾動(dòng)視圖上, 這個(gè)規(guī)則總感覺(jué)有些奇怪, 不過(guò)以上的需求完成確確實(shí)實(shí)是建立在這個(gè)規(guī)則之上, 所以合理利用這個(gè)默認(rèn)的規(guī)則還是有好處的.
作為主視圖的 ScrollView 必須要遵守一個(gè)手勢(shì)協(xié)議的代理方法, 并返回 YES.