在日常的開發中,我們經常會用到UIScrollView,然而,它是一個問題頻出的控件,比如在nib中使用它就必須手動為它創建一個ContentView.當然了使用春代碼的時候使用了懶加載機制使得它能夠擁有一個contentView,今天我們不談這個問題,我們來談談UIScrollView的事件攔截相關的知識.
在進入正題之前,先補個知識點:響應鏈「Responder Chain」.iOS設備的屏幕上有很多的元素,當用戶觸發了一個事件之后:
用戶觸發事件 ->系統框架UIKit創建一個包含該事件各種信息的事件對象 -> 把它加入到前臺App的事件隊列中 -> UIApplication響應該事件 -> 把該事件交給當前的window對象 (-> 根據不同的事件對象生成不同新對象)
①觸摸事件 -> 傳遞新對象 -> 觸發事件的View(hit-testing).
②搖動或者遠程控制事件 ->window對象把搖動事件或者遠程控制事件傳遞給第一響應者來處理.
?
接下來談一下一個現象:
1>在UIScrollView上添加一個ContentView,在ContentView上添加幾個Button,運行
你會發現:點擊按鈕的時候會出現延遲現象,
2>設置delayContentsTouches為NO
你會發現:在按鈕上無法滑動ScrollView
3>自定義一個類,繼承UIScrollView,重寫方法- (BOOL)touchesShouldCancelInContentView:(UIView *)view;并且直接返回YES:
你會發現,問題解決了.
?