iOS面試題:UIScrollView大概是如何實現的,它是如何捕捉、響應手勢的?

UIScrollView在滾動過程當中,其實是在修改原點坐標。當手指觸摸后, scroll view會暫時攔截觸摸事件,使用一個計時器。假如在計時器到點后沒有發生手指移動事件,那么 scroll view 發送 tracking events 到被點擊的 subview。假如在計時器到點前發生了移動事件,那么 scroll view 取消 tracking 自己發生滾動。

首先了解下UIScrollView對于touch事件的接收處理原理:

  • UIScrollView應該是重載了hitTest 方法,并總會返回itself 。所以所有的touch 事件都會進入到它自己里面去了。內部的touch事件檢測到這個事件是不是和自己相關的,或者處理或者除遞給內部的view。
  • 為了檢測touch是處理還是傳遞,UIScrollView當touch發生時會生成一個timer。
    • 如果150ms內touch未產生移動,它就把這個事件傳遞給內部view
    • 如果150ms內touch產生移動,開始scrolling,不會傳遞給內部的view。(例如, 當你touch一個table時候,直接scrolling,你touch的那行永遠不會highlight。)
    • 如果150ms內touch未產生移動并且UIScrollView開始傳遞內部的view事件,但是移動足夠遠的話,且canCancelContentTouches = YES,UIScrollView會調用touchesCancelled方法,cancel掉內部view的事件響應,并開始scrolling。(例如, 當你touch一個table, 停止了一會,然后開始scrolling,那一行就首先被highlight,但是隨后就不在高亮了)

更多:iOS面試題合集

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容