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

iOS17.3后如何通过原生框架禁用Unity应用MyApp的Direct Touch Area

解决方案:iOS 17.3+ 禁用Unity应用的Direct Touch Area

以下是针对iOS 17.3后原方法失效的替代方案,均基于原生iOS框架实现,无需用户手动修改系统设置:

1. 使用accessibilityAllowsDirectInteraction属性替代旧Trait

iOS 17.0及以后,苹果逐步将allowsDirectInteraction从UIAccessibilityTraits迁移为独立的视图属性accessibilityAllowsDirectInteraction。直接给Unity的主视图或目标交互区域设置该属性为false即可禁用直接触控:

Objective-C 示例:

// 获取Unity主视图(通常是UIWindow的rootViewController.view)
UIView *unityMainView = [[UIApplication sharedApplication].keyWindow rootViewController].view;
unityMainView.accessibilityAllowsDirectInteraction = NO;

Swift 示例:

guard let unityMainView = UIApplication.shared.keyWindow?.rootViewController?.view else { return }
unityMainView.accessibilityAllowsDirectInteraction = false

如果需要针对特定Unity UI元素(如按钮、面板),可通过Unity原生插件获取对应视图的原生引用后设置该属性。

2. 全局覆盖应用级直接交互权限

若需全局禁用应用内所有区域的直接触控,可监听UIAccessibilityVoiceOverStatusDidChange通知,在旁白激活时动态设置全局属性:

Objective-C 示例:

// 应用启动时注册通知
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(voiceOverStatusChanged:)
                                             name:UIAccessibilityVoiceOverStatusDidChangeNotification
                                           object:nil];

// 通知回调实现
- (void)voiceOverStatusChanged:(NSNotification *)notification {
    BOOL voiceOverEnabled = UIAccessibilityIsVoiceOverRunning();
    if (voiceOverEnabled) {
        // 遍历所有窗口及子视图设置属性
        for (UIWindow *window in [UIApplication sharedApplication].windows) {
            window.accessibilityAllowsDirectInteraction = NO;
            [self disableDirectInteractionForView:window];
        }
    }
}

// 递归设置子视图
- (void)disableDirectInteractionForView:(UIView *)view {
    view.accessibilityAllowsDirectInteraction = NO;
    for (UIView *subview in view.subviews) {
        [self disableDirectInteractionForView:subview];
    }
}

注意事项

  • 该属性仅在旁白(VoiceOver)激活时生效,匹配直接触控的触发场景;
  • 对于Unity渲染的3D/2D元素,若无法直接获取原生视图引用,可在Unity侧将交互区域标记为无障碍元素,再通过原生插件拦截其直接交互权限;
  • 测试时需确保旁白处于激活状态,验证直接触控区域是否被正确禁用。

内容的提问来源于stack exchange,提问作者David Leonardo Acosta Laverde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:01:05