[英]Why is my subclassed UIView not recieving touches moved when in a UIScrollView?
我有一個名為Boards的類,它是UIView
一個子類,我分配了一個實例並將其放入UIScrollView
,我想要而不是他接觸到UIScrollView
,而是轉到子視圖:Boards(UIView),I只是不知道如何將UIScrollView
的觸摸傳遞給UIView
。
PS:我將手動更改UIScrollView
的contentOffset
,因此我不需要UIScrollView
的觸摸,但是在UIView
。
PS:UIView正在接收touchesEnded
和touchesBegan
事件,只是沒有touchesMoved
如果您希望UIScrollView僅以編程方式滾動,則必須將其子類化並覆蓋touchesBegan / Moved / Canceled / Ended方法。 即使這樣,你也可能遇到問題。 UIScrollView不是為忽略用戶輸入而設計的。
如果可能,您應該使用自定義視圖替換UIScrollView。 您可以更改視圖的transform
屬性以移動其內容,而不是更改contentOffset
。
或者您可以嵌套兩個視圖,外部視圖和內部視圖。 將您的Boards視圖放在內部視圖中。 然后,不要更改contentOffset
,而是更改內部視圖的frame
。
如果動畫很重要,我很確定第二個選項會提供動畫過渡,第一個也可能。
嘗試關閉delaysContentTouches
中的delaysContentTouches。 這將立即將所有子項觸摸直接轉發到子視圖,而不檢查它是否是滾動視圖觸摸 。
為什么不創建UIScrollView的子類? 然后,將子類接收的所有觸摸事件傳遞給UIView,如下所示。
@implementation SubclassOfScrollView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.nextResponder touchesBegan:touches withEvent:event];
}
@end
這里有關於此問題的新更新(包括ZoomScrollView源代碼的鏈接+ UIScrollView內部的一些優秀解釋)。
另外,查看Apple更新的ScrollViewSuite示例。 它在第3個示例中有您描述的場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.