我有一个名为Boards的类,它是UIView
的子类,我分配了一个实例并将其放入UIScrollView
,我想代替他接触到UIScrollView
1}},但是对于子视图:Boards(UIView),我只是不知道如何将UIScrollView
的触摸传递给UIView
。
P.S:我将手动更改contentOffset
的{{1}},因此我不需要UIScrollView
中的触摸,而是UIScrollView
中的触摸。
P.S:UIView正在收到UIView
和touchesEnded
事件,而不是touchesBegan
答案 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个示例中有您描述的场景。