为什么我的子类UIView在UIScrollView中没有接收到触摸?

时间:2010-01-15 01:46:13

标签: iphone uiview uiscrollview touchesmoved

我有一个名为Boards的类,它是UIView的子类,我分配了一个实例并将其放入UIScrollView,我想代替他接触到UIScrollView 1}},但是对于子视图:Boards(UIView),我只是不知道如何将UIScrollView的触摸传递给UIView

P.S:我将手动更改contentOffset的{​​{1}},因此我不需要UIScrollView中的触摸,而是UIScrollView中的触摸。

P.S:UIView正在收到UIViewtouchesEnded事件,而不是touchesBegan

4 个答案:

答案 0 :(得分:2)

如果您希望UIScrollView仅以编程方式滚动,则必须将其子类化并覆盖touchesBegan / Moved / Canceled / Ended方法。即使这样,你也可能遇到问题。 UIScrollView的设计不是为了忽略用户输入。

如果可能,您应该使用自定义视图替换UIScrollView。您可以更改视图的contentOffset属性以移动其内容,而不是更改transform

或者您可以嵌套两个视图,外部视图和内部视图。将您的Boards视图放在内部视图中。然后,不要更改contentOffset,而是更改内部视图的frame

如果动画很重要,我很确定第二个选项会提供动画过渡,第一个选项也可以。

答案 1 :(得分:0)

尝试在滚动视图中关闭delaysContentTouches。这会立即将所有子项触摸直接转发到子视图,而不会检查它是否是滚动视图触摸

答案 2 :(得分:0)

为什么不创建UIScrollView的子类? 然后,将子类接收的所有触摸事件传递给UIView,如下所示。

@implementation SubclassOfScrollView

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

@end

答案 3 :(得分:0)

问题here的新更新(包括ZoomScrollView源代码的链接+ UIScrollView内部的一些优秀解释)。另外,请查看Apple更新的ScrollViewSuite示例。它在第3个示例中有您描述的场景。