Swift iOS游戏开发:点击开始按钮后如何设置指定时间内禁止屏幕触控
解决方案
有两种常用的实现方案,你可以根据自己的需求选择:
方案1:通过标记位精细控制触摸响应
适合后续可能需要部分响应触控的场景,修改成本低:
- 首先在当前类中新增一个触控权限控制属性
var isTouchEnabled = true
- 在开始按钮的点击回调中关闭触控权限,同时设置延时恢复
@objc func startButtonClicked() { // 关闭触控响应 isTouchEnabled = false // 此处添加你的开场动画播放代码 // 10秒后恢复触控权限 DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [weak self] in self?.isTouchEnabled = true } }
- 修改你现有的触摸处理逻辑,开头增加权限判断
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { // 没有触控权限时直接终止后续逻辑 guard isTouchEnabled else { return } for touch in touches { let location = touch.location(in: self) player.position.x = location.x player.position.y = -300//location.y } }
注意:如果你还重写了
touchesBegan、touchesEnded等触摸相关方法,需要在这些方法的开头也加上同样的权限判断逻辑。
方案2:直接禁用整个视图的用户交互
适合开场动画期间完全不需要响应任何交互的场景,不需要修改原有触摸代码:
直接在开始按钮的点击回调中添加如下代码即可:
@objc func startButtonClicked() { // 禁用整个视图的交互 self.view?.isUserInteractionEnabled = false // 此处添加你的开场动画播放代码 // 10秒后恢复交互 DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [weak self] in self?.view?.isUserInteractionEnabled = true } }
优化建议
如果你的开场动画有明确的结束回调(比如SKAction的completion块),建议将恢复交互的逻辑放在动画结束回调中,比写死10秒延时的兼容性更好,避免动画还没播放完就恢复交互,或者动画已经结束还无法操作的问题。
内容的提问来源于stack exchange,提问作者user12137285
相关产品推荐
相关产品推荐

