ios - 在 iOS 中切换 userInteractionEnabled 属性时遇到问题

标签 ios event-handling

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

我在网上搜索过,也搜索过 Apple 提供的开发人员文档,找到了有关 touchesBegan 和 touchesEnded 方法的信息。然而,据我所知,这些方法需要被显式调用,这让我回到了我最初的问题,即在没有用户交互的情况下无法调用这些函数。

如果有人能提供帮助,我将不胜感激!在过去的几周里,我一直在绞尽脑汁思考这个问题,但我只是没有看到解决方案。

最佳答案

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

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

关于ios - 在 iOS 中切换 userInteractionEnabled 属性时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220418/

相关文章:

ios - 需要有关 XCode : Thread 1:EXC_BAD_INSTRUCTION (WebView) 的帮助

ios - 如何在选项卡栏 Controller 中更新选项卡 View

ios - GCKMediaInformation initWithContentID 已弃用警告

asp.net - 将 ServerClick 事件添加到 ASP.NET <button> 元素

c++ - 如何在接收器对象上实现传出接口(interface) (C++)

带有多行 UITextField 的 iOS AlertController

ios - 在 iOS Open GL ES 中使用 GL_LINES 渲染对象的最小尺寸

c# - 如何在 C++/CLI 中将事件处理程序分配给事件?

c# - 如何使用 XAML 将事件绑定(bind)到成员字段或属性的事件处理程序?

javascript - JS/jQuery - 如何将某个类的目标元素的innerHTML 结合起来并附加/替换它?