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

iOS Swift如何实现仅点击开始按钮后才允许屏幕触摸交互

实现方案

你之前的写法无法实现需求的核心原因是:父视图的isUserInteractionEnabled设为false时,所有子视图都会继承该限制,无法单独放开某一个子视图的交互权限,所以需要调整实现逻辑。
下面是最通用、改动量最小的实现方案:

方案:全屏触摸拦截层(推荐)

逻辑是在页面最上层加一个透明的全屏视图吃掉所有触摸事件,仅把开始按钮放在该拦截层之上确保它能响应点击,点击开始后直接移除拦截层即可放开所有交互。

步骤1:声明拦截层属性

在你的ViewController类中添加属性:

// 全局触摸拦截视图
private var touchBlockingView: UIView?

步骤2:初始化时添加拦截层

在viewDidLoad或者游戏初始化的逻辑中添加如下代码:

// 1. 创建全屏拦截视图
touchBlockingView = UIView(frame: view.bounds)
touchBlockingView?.backgroundColor = .clear
// 打开交互,吃掉所有落在该视图上的触摸事件
touchBlockingView?.isUserInteractionEnabled = true
view.addSubview(touchBlockingView!)

// 2. 把开始按钮提到视图最上层,保证它可以响应点击
view.bringSubviewToFront(你的开始按钮实例)

步骤3:点击开始按钮后放开所有交互

在开始按钮的点击回调方法中添加:

// 移除拦截层或者直接隐藏都可以
touchBlockingView?.removeFromSuperview()
// 或者使用 touchBlockingView?.isHidden = true

备选方案:单独控制子视图交互

如果你的页面交互控件数量很少,也可以在初始化时手动把除了开始按钮之外的所有交互控件的isUserInteractionEnabled设为false,点击开始按钮后再统一设为true即可,该方案适合页面结构简单的场景。

内容的提问来源于stack exchange,提问作者user12137285

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:05