Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何防止触摸事件传递到UIView';什么是superview?_Iphone_Cocoa Touch_Uiscrollview - Fatal编程技术网

Iphone 如何防止触摸事件传递到UIView';什么是superview?

Iphone 如何防止触摸事件传递到UIView';什么是superview?,iphone,cocoa-touch,uiscrollview,Iphone,Cocoa Touch,Uiscrollview,我制作了一个程序,其中包含可以在屏幕上拖动移动的图片。 我还使用了UIScrollView,因为空间比窗口大。 我将UIView子类化为pictures视图,以在这个类中显示图片和处理触摸。 图片视图作为子视图添加到滚动视图中。 但现在我有一个问题: 当我拖动图片时,滚动视图将与图片一起移动。 我想知道是否有一种方法可以使用picture类中的触摸来防止它们传递到superview。您应该将代码放在UIView的“touchesMoved:withEvent:”方法中。如果您的视图将自行处理此事

我制作了一个程序,其中包含可以在屏幕上拖动移动的图片。 我还使用了UIScrollView,因为空间比窗口大。 我将UIView子类化为pictures视图,以在这个类中显示图片和处理触摸。 图片视图作为子视图添加到滚动视图中。 但现在我有一个问题: 当我拖动图片时,滚动视图将与图片一起移动。
我想知道是否有一种方法可以使用picture类中的触摸来防止它们传递到superview。

您应该将代码放在UIView的“touchesMoved:withEvent:”方法中。如果您的视图将自行处理此事件,则它不应冒泡到superview

为什么使用
UIScrollView
?您拥有自己的滚动图片视图,因此无需使用
UIScrollView
来处理滚动触摸输入


另一方面,为什么要使用自己的滚动图片视图
UIScrollView
将处理滚动大小写,因此您只需在
UIScrollView
下放置一个
UIImageView
即可,除非您自己的视图有其他行为,否则其工作原理相同,但您可以对
UIImageView
UIView
进行子类化,并且无需自己滚动图片,因为您知道
UIScrollView
将为您解决此问题。

Icewind的上述评论解决了此问题:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return false
}

您可以尝试在UIScrollView中将canCancelContentTouches设置为NO。在你的UIView中将exclusiveTouch设置为YES,并在14:22将图像–icewind Mar 7设置为YES

我知道这是一个老问题,但我有一个类似的问题和批准的答案(在滚动视图中将
CancancancelContentTouchs
设置为
false
,在子视图中将
isExclusiveTouch
设置为
true
)不适合我

经过一些实验,我发现简单地重写子视图中的
手势识别器应该开始(:)
以返回
false
就解决了这个问题:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return false
}

您需要子类
UIScrollView
并覆盖
touchshouldCancel

override func touchesShouldCancel(in view: UIView) -> Bool {
    return !(view is MyView) // or whatever your check is
}

作为奖励,您可能希望
scrollView.delaysContentTouches=false
在自定义控件上实现即时响应。

当我重写TouchsMoved:withEvent:时,但当我拖动覆盖TouchsMoved:withEvent:的子视图时,scrollView仍会滚动,我使用总视图作为scrollview的子视图,然后将所有图片视图放在总视图上。我这样做是因为我需要同时缩放所有图片视图。total View没有重写Touches Moved:withEvent:(只有图片视图有),问题出在哪里?您可以尝试在UIScroll视图中将canCancelContentTouches设置为NO。并在您的UIView中将exclusiveTouch设置为YESimage@icewind:非常感谢,我的问题通过你的解决方案解决了。这很有效??!哇,谢谢你,但我不太明白你为什么在scrollview上设置“你不能取消触摸”,让它取消滚动触摸。。似乎有点违反直觉,但可能是我需要rtfm的情况。谢谢你的提示。很抱歉,你误解了我的意思。图片视图不是滚动视图,而是带有触摸处理程序的UIView。我需要拖动来改变图片的位置,因为整个游戏的面积比iPhone的屏幕大,所以我需要UIScrollView来缩放和滚动。图片视图是ScrollView的子视图