2010-01-15 94 views
3

我有一個叫做Boards的類,它是UIView的一個子類,我分配了一個實例並將它放到UIScrollView中,我想代替他觸及UIScrollView,但是轉到子視圖:Boards(UIView) ,我只是不知道如何將UIScrollView的觸動傳遞給UIView爲什麼我的子類UIView沒有收到在UIScrollView中移動的觸摸?

P.S:我將手動更改UIScrollViewcontentOffset,因此我不需要UIScrollView中的觸摸,但是在UIView中。

P.S:UIView的正在接收touchesEndedtouchesBegan事件,只是沒有touchesMoved

+0

http://stackoverflow.com/questions/8485853/ios-5-uiscrollview-not-pass-touches-to-nextresponder而不是:[self.nextResponder touchesMoved:touches withEvent:event]; 使用:[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event]; – jold 2013-02-27 11:44:58

回答

2

如果你想要的UIScrollView只編程滾動,你必須繼承並重寫的touchesBegan /移動/取消/截止的方法。即使那樣,你可能有問題。 UIScrollView沒有設計爲忽略用戶輸入。

如果可能,您應該用自定義視圖替換UIScrollView。您可以將視圖的transform屬性更改爲繞其內容移動,而不是更改contentOffset

或者你可以嵌套兩個視圖,外部視圖和內部視圖。將您的Boards視圖放置在內部視圖中。然後,而不是更改contentOffset,更改內部視圖的frame

如果動畫很重要,我敢肯定第二個選項會提供一個動畫過渡,第一個選項也可以。

0

嘗試在滾動視圖關閉delaysContentTouches。這將立即將所有兒童觸摸直接轉發給子視圖,而不檢查是否是滾動視圖觸摸

+0

這不是一個解決方案,只是告訴它等待。不工作! – Jaba 2010-01-15 13:57:23

0

爲什麼不創建UIScrollView的子類? 然後,將如下所示的由子類接收的所有觸摸事件傳遞給UIView。

@implementation SubclassOfScrollView 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
} 

@end 
0

關於問題here的新更新(包括ZoomScrollView源代碼的鏈接+關於UIScrollView內部的一些極好的解釋)。
另外,請查看Apple更新的ScrollViewSuite示例。它在第三個例子中有你描述的場景。