繁体   English   中英

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

[英]Why is my subclassed UIView not recieving touches moved when in a UIScrollView?

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

PS:我将手动更改UIScrollViewcontentOffset ,因此我不需要UIScrollView的触摸,但是在UIView

PS:UIView正在接收touchesEndedtouchesBegan事件,只是没有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM