You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift iOS游戏开发:点击开始按钮后如何设置指定时间内禁止屏幕触控

解决方案

有两种常用的实现方案,你可以根据自己的需求选择:

方案1:通过标记位精细控制触摸响应

适合后续可能需要部分响应触控的场景,修改成本低:

  1. 首先在当前类中新增一个触控权限控制属性
var isTouchEnabled = true
  1. 在开始按钮的点击回调中关闭触控权限,同时设置延时恢复
@objc func startButtonClicked() {
    // 关闭触控响应
    isTouchEnabled = false
    // 此处添加你的开场动画播放代码
    
    // 10秒后恢复触控权限
    DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [weak self] in
        self?.isTouchEnabled = true
    }
}
  1. 修改你现有的触摸处理逻辑,开头增加权限判断
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:24:02