我有一個顯示PDF的視圖。它應該是可縮放的,所以我也創建了一個UIScrollView,並在其委託中實現了viewForZoomingInScrollView以返回PDF視圖。到現在爲止還挺好。 但是,當用戶到達放大的PDF頁面的邊緣時,我想翻到下一頁。聽起來很容易,但我似乎無法弄清楚如何去做。如何過濾UIScrollView的觸摸事件?
我已經嘗試了一些不同的方法:
使用scrollViewDidScroll來檢測,如果滾動已經達到了邊緣。這裏的問題是,如果zoomScale是1,因此不可能滾動,那麼這個函數永遠不會被調用。但是UIScrollView仍然會吞下所有的觸摸事件,所以我也無法檢測到touchesMoved中的邊緣。如果不縮放不是一個選項,則將canCancelContentTouches設置爲NO,因爲這樣也會阻止放大。
子類化UIScrollView,並將某些觸摸事件轉發給下一個響應者。不幸的是,當UIScrollView檢測到拖動操作並取消觸摸時,即使對於UIScrollView子類,touchesMoved和touchesEnded也不會被調用。同樣,將canCancelContentTouches設置爲NO也不好,因爲這也會阻止某些所需的UIScrollView功能。
在滾動視圖(作爲其兄弟)頂部創建一個透明視圖,以便此視圖首先獲取所有觸摸事件,然後將某些觸摸轉發給滾動視圖。不幸的是,滾動視圖不響應這些調用。
我不能使用touchesShouldCancelInContentView,因爲沒有得到實際的觸摸作爲參數,我是否希望滾動視圖處理觸摸事件也取決於觸摸事件本身的屬性(例如,我們已經處於邊緣的方向上的觸摸移動不應該被滾動視圖取消,而是在另一方向上的移動可能是)。
看起來像什麼的UIScrollView正在做的是不從的touchesBegan/touchesMoved發起的,而是它得到的觸摸方式之前一些通知。可能以一些我無法攔截,無法複製的無證方式。
那麼有沒有什麼辦法可以通過UIScrollView獲得關於所有觸摸動作的通知,同時仍然可以使用(當某些條件適用時)UIScrollView用於縮放和滾動?