我有一个主视图控制器,它覆盖touchesBegan,并在点击某个屏幕位置时播放声音。我有一个从这个视图控制器到另一个视图控制器的segue,我的自定义设置视图控制器。然而,当我滑动我的手指在这个新的,背景视图控制器仍然响应我的触摸,因为一个声音仍在播放。
我没有实现导航控制器,而且似乎其他segue类型在后台响应触摸事件时也有同样的问题。第一个视图控制器不应该在完成任务后不响应这些操作吗?或者,如果我误解了,在后台VC中阻止触摸事件的正确方法是什么?
编辑:在第一个视图控制器中,当打印view.isUserInteractionEnabled时,尽管视图控制器在后台,我还是得到了true。不确定这是否相关。
编辑2: --我尝试添加一行,以准备segue重写self.view.isUserInteractionEnabled=false,但奇怪的是,只有在禁用设置视图控制器时,才会禁用触摸。
更奇怪的是:如果我在新的视图控制器中覆盖touchesBegan,它就会使原始视图控制器中的touchesMoved和touchesBegan方法保持沉默。但是,如果我只是在新控制器中重写touchesMoved,那么将调用两个视图控制器中的touchesMoved方法。
我读到,我们需要覆盖所有4个触摸处理程序,并调用超类方法,而我忘了这样做。但是,重写这两个类中的所有4个方法仍然会导致这个底层的触摸事件发生。
我也想坚持这个方法,而不是手势识别器。我想应该有个合适的方法来处理这个反应链吧?
这里有一个简单的复制方法:如果您创建了一个具有两个视图控制器A和B的简单项目,并且有一个按钮导致从A到B的segue,并在VC A中实现了touches方法(让我们在控制台上打印一些东西),那么即使在segue之后,也会发生完全相同的事情。VC A仍然在处理触摸事件。
发布于 2020-11-21 21:43:10
如果要防止对前一个视图的接触,请尝试将下一个视图显示为全屏。
let controller = segue.destination as! YourViewController
controller.modalPresentationStyle = .fullScreenhttps://stackoverflow.com/questions/43108871
复制相似问题