[英]how to prevent a touch event passed to a UIView's superview?
我制作了一个程序,其中包含可以拖动以在屏幕上移动的图片。 我也使用UIScrollView,因为空间大于窗口。 我将UIView子类化为图片视图,以显示图片并处理此类中的触摸。 图片视图作为子视图添加到scrollView。 但现在我遇到了一个问题:当我拖动图片时,scrollView会与图片一起移动。 我想知道是否有办法消耗图片类中的触摸以防止它们传递给superview。
您应该将代码放在UIView的“touchesMoved:withEvent:”方法中。 如果您的View将自己处理此事件,那么它不应该冒泡到superview
冰风的上述评论解决了这个问题:
您可以尝试在UIScrollView中将canCancelContentTouches设置为NO。 并在你的UIView中使用图像设置exclusiveTouch为YES - 冰风3月7日14:22
我知道这是一个老问题,但我有一个类似的问题和批准的答案(在滚动视图canCancelContentTouches
设置为false
,在子视图中将isExclusiveTouch
为true
)对我不起作用。
经过一些实验,我发现在我的子视图中简单地覆盖gestureRecognizerShouldBegin(_:)
以返回false
解决了问题:
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return false
}
为什么你使用UIScrollView
? 您拥有自己的滚动图片视图,因此无需使用UIScrollView
来处理滚动触摸输入。
换句话说,为什么你使用自己的滚动图片视图? UIScrollView
将处理滚动的情况,所以你可以在UIScrollView
下放置一个UIImageView
,除非你自己的视图有一些其他的行为,但是你可以UIImageView
或UIView
而不需要你自己滚动图片,因为你知道UIScrollView
会做它适合你。
您需要子类UIScrollView
并覆盖touchesShouldCancel
:
override func touchesShouldCancel(in view: UIView) -> Bool {
return !(view is MyView) // or whatever your check is
}
作为奖励,您可能需要scrollView.delaysContentTouches = false
以便在自定义控件上进行即时响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.