嵌套視圖的核心是處理滑動臨界條件,協(xié)調(diào)手勢沖突。
臨界條件比較麻煩,但是不是技術(shù)難點。
手勢沖突看這里:http://www.itdecent.cn/p/88e2b5694765
我只說一個方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
這個方法是處理手勢沖突用的:在需要接收上層手勢的下層視圖打開,下層視圖與其點擊區(qū)域的所有子視圖就會同時響應(yīng)上層的所有手勢,若關(guān)閉,則手勢依然于第一個響應(yīng)視圖處響應(yīng)而不傳遞。上層視圖不需要做額外處理。otherGestureRecognizer.view表示傳入手勢的視圖,即上層可以響應(yīng)的對應(yīng)傳入視圖,通過對此View的判斷來決定是否允許此手勢透傳。
舉個例子,我的tableView1.Sub->scrollView1,scrollView1.sub->tableView2;
我在tableView1打開此方法,所有手勢允許透傳,tableView1、scrollView1、tableView2會同時響應(yīng)他們可以響應(yīng)的手勢;
此時在tableView1的此方法處判斷響應(yīng)view為scrollView時返回false,則對應(yīng)的橫向手勢無法透傳,于是此手勢被最上層響應(yīng)視圖吸收,現(xiàn)象即為只允許單向滑動視圖。
個人觀點,未能系統(tǒng)驗證,如有疏漏,感謝指正。