[英]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.