如何防止传递给UIView的超级视图的触摸事件?

Car*_*loS 5 iphone cocoa-touch uiscrollview

我制作了一个程序,其中包含可以拖动以在屏幕上移动的图片.我也使用UIScrollView,因为空间大于窗口.我将UIView子类化为图片视图,以显示图片并处理此类中的触摸.图片视图作为子视图添加到scrollView.但现在我遇到了一个问题:当我拖动图片时,scrollView会与图片一起移动.我想知道是否有办法消耗图片类中的触摸以防止它们传递给superview.

Nik*_*nko 7

您应该将代码放在UIView的"touchesMoved:withEvent:"方法中.如果您的View将自己处理此事件,那么它不应该冒泡到superview

  • 您可以尝试在UIScrollView中将canCancelContentTouches设置为NO.并在UIView中将exclusiveTouch设置为YES (2认同)

Gre*_*own 6

我知道这是一个老问题,但我有一个类似的问题,并且批准的答案(设置canCancelContentTouchesfalse滚动视图和isExclusiveTouchtrue视图)对我不起作用。

经过一些实验,我发现只需gestureRecognizerShouldBegin(_:)在子视图中重写以返回即可false解决问题:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return false
}
Run Code Online (Sandbox Code Playgroud)