Iphone 如何将触摸事件限制为仅一个视图控制器?

Iphone 如何将触摸事件限制为仅一个视图控制器?,iphone,ios,objective-c,Iphone,Ios,Objective C,我正在制作类似于ruzzle的东西,为了在字母(按钮)之间滑动,我使用了触摸事件(touchStart,touchMove,touchEnded) 该应用程序由两个视图控制器组成,一个情节提要。第一个用于主菜单,第二个用于inGame屏幕,我使用情节提要id在它们之间切换。在从inGame视图切换到主菜单视图之前,一切都非常正常 问题是,当您从inGame屏幕返回主菜单时,触摸事件仍处于活动状态,这是一个问题,因为当您触摸屏幕上的任何位置时,应用程序崩溃。之所以会发生这种情况,是因为出于某种原因

我正在制作类似于ruzzle的东西,为了在字母(按钮)之间滑动,我使用了触摸事件(
touchStart
touchMove
touchEnded

该应用程序由两个
视图控制器
组成,一个
情节提要
。第一个用于主菜单,第二个用于inGame屏幕,我使用
情节提要
id在它们之间切换。在从inGame视图切换到主菜单视图之前,一切都非常正常

问题是,当您从inGame屏幕返回主菜单时,触摸事件仍处于活动状态,这是一个问题,因为当您触摸屏幕上的任何位置时,应用程序崩溃。之所以会发生这种情况,是因为出于某种原因,inGame视图中的方法是从MainMenu视图调用的。是否有限制触摸事件仅适用于inGameView

注:
setUserInteraction:(BOOL)
方法在我的例子中不是一个选项,因为你不能再按主菜单中的按钮了

使用从主菜单移动到inGame

GamePlayView *gpv = [self.storyboard instantiateViewControllerWithIdentifier:@"GamePlayView"];
[self presentViewController:gpv animated:YES completion:nil];
从inGame到主菜单

ViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
[self presentViewController:svc animated:YES completion:nil];

问题是,每次您
呈现ViewController:animated:completion:
新的视图控制器下仍然存在以前的视图控制器。如果顶部显示的视图控制器未处理/阻止所有触摸,则它们将传递给响应器链中的其他视图/控制器

从主视图中,您可以继续使用
presentViewController:animated:completion:
。但要从游戏视图返回菜单,应使用
dismissViewControllerAnimated:completion:

。这将从屏幕上删除游戏视图控制器(并销毁实例),因此它不会继续占用资源或处理触摸。

我认为您的问题与触摸事件无关。每次切换视图控制器时,您都在创建一个新的视图控制器。似乎更可能的情况是,当您从游戏移动到菜单时,您只需关闭游戏控制器,即可再次显示现有的主控制器

显示如何在视图控制器之间移动的代码。我正在使用
GamePlayView*gpv=[self.storyboard instantialeviewController WithiIdentifier:@“GamePlayView”]从主菜单移动到inGame;[自我呈现视图控制器:gpv动画:是完成:无]和使用
ViewController*svc=[情节提要实例化viewcontrollerwhiteIdentifier:@“ViewController]”从inGame到主菜单;[自我呈现视图控制器:svc动画:是完成:无]