Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
在iOS中切换userInteractionEnabled属性时出现问题_Ios_Event Handling - Fatal编程技术网

在iOS中切换userInteractionEnabled属性时出现问题

在iOS中切换userInteractionEnabled属性时出现问题,ios,event-handling,Ios,Event Handling,我正在为iOS开发一款tic-tac-toe游戏,我正在使用UIButtons和UIImageView的组合,以允许用户交互并显示所做的动作。我的问题是,在cpu移动之前,按钮继续接受用户输入,这打破了我的游戏逻辑。我多次尝试切换userInteractionEnabled属性,但只能将其关闭。在游戏中启动一切的引擎是我按下按钮的方法。我还在这个方法中切换userInteractionEnabled属性,这就是我的问题:禁用用户交互后如何重新启用该属性?是否有在事件之间调用的方法可以覆盖? 我搜

我正在为iOS开发一款tic-tac-toe游戏,我正在使用UIButtons和UIImageView的组合,以允许用户交互并显示所做的动作。我的问题是,在cpu移动之前,按钮继续接受用户输入,这打破了我的游戏逻辑。我多次尝试切换userInteractionEnabled属性,但只能将其关闭。在游戏中启动一切的引擎是我按下按钮的方法。我还在这个方法中切换userInteractionEnabled属性,这就是我的问题:禁用用户交互后如何重新启用该属性?是否有在事件之间调用的方法可以覆盖?

我搜索了网络,搜索了苹果提供的开发者文档,找到了ToucheSBegind和touchesEnded方法的相关信息。然而,据我所知,这些方法需要显式调用,这让我回到了我最初的问题,即在没有用户交互的情况下无法调用这些函数


如果有人能帮忙,我将不胜感激!在过去的几周里,我一直在绞尽脑汁想这个问题,但我没有找到解决办法。

我认为对于像“井字游戏”这样的游戏来说,计算反击的速度应该非常快,以至于可以在第一次按下按钮时立即完成。如果你正在做一些复杂的事情来计算下一步的动作,比如启动线程,你可能需要重新考虑


让我们假设,你的游戏类似于国际象棋或围棋,要想做出反击可能需要更长的时间。您的视图控制器应该有一个方法来为当前播放器进行移动,我们将其称为-makeMove:。您的-buttonPressed操作应该调用该方法为用户进行移动。作为回应,-makeMove:应该更新游戏状态,将当前玩家切换到下一个玩家。如果新的当前玩家是计算机,那么它应该禁用控制并开始计算下一步的过程。让我们想象一下,这是通过调用某个NSO操作来完成的,因此提出下一步是一个异步任务。一旦操作提出移动,它应该再次调用-makeMove:(通过调用-performSelectorOnMainThread:),这将再次更新游戏状态和当前玩家。不过,这一次,它应该看到新的当前播放器不是计算机,因此它应该重新启用控件。

Caleb,感谢您的建议。我想我应该多解释一下我的设置。我调用performSelector:withObject:afterDelay:来延迟绘制计算机的移动。问题是,我用来确定是计算机轮到还是玩家轮到的标志在计算机计算其移动后被翻转。所以我有一个与你的建议相似的设置,但它似乎不起作用。我尝试在performSelector调用后更改标志,但用户仍然能够在绘制计算机移动之前点击并更新电路板。performSelector是否可以切换输入?