我制作了一个程序,其中包含可以拖动以在屏幕上移动的图片。 我也使用UIScrollView,因为空间大于窗口。 我将UIView子类化为图片视图,以显示图片并处理此类中的触摸。 图片视图作为子视图添加到scrollView。 但现在我有一个问题: 当我拖动图片时,scrollView与图片一起移动。 我想知道是否有办法消耗图片类中的触摸以防止它们传递给superview。
答案 0 :(得分:6)
您应该将代码放在UIView的“touchesMoved:withEvent:”方法中。如果你的View会自己处理这个事件,那么它不应该冒泡到superview
答案 1 :(得分:3)
冰风的上述评论解决了这个问题:
您可以尝试在UIScrollView中将canCancelContentTouches设置为NO。并在你的UIView中使用图像设置exclusiveTouch为YES - 冰风3月7日14:22
答案 2 :(得分:0)
为什么使用UIScrollView
?您拥有自己的滚动图片视图,因此无需使用UIScrollView
来处理滚动触摸输入。
相反,为什么你使用自己的滚动图片视图? UIScrollView
会处理滚动大小写,因此您可以在UIImageView
下放置UIScrollView
,除非您自己的视图有其他行为但您可以继承UIImageView
或{ {1}}并且您无需自己滚动图片,因为您知道UIView
会为您执行此操作。
答案 3 :(得分:0)
我知道这是一个老问题,但我有一个类似的问题和批准的答案(在滚动视图中将canCancelContentTouches
设置为false
,isExclusiveTouch
设置为true
在子视图中)对我不起作用。
经过一些实验,我发现在我的子视图中简单地覆盖gestureRecognizerShouldBegin(_:)
以返回false
解决了问题:
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return false
}
答案 4 :(得分:0)
您需要子类UIScrollView
并覆盖touchesShouldCancel
:
override func touchesShouldCancel(in view: UIView) -> Bool {
return !(view is MyView) // or whatever your check is
}
作为奖励,您可能希望scrollView.delaysContentTouches = false
对自定义控件进行即时响应。