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

如何在Swift中编程实现VoiceOver语音的临时全局启用/禁用?

临时控制VoiceOver播报的实现方案

针对录音时VoiceOver播报被录入的问题,无需全局禁用VoiceOver,可通过官方API临时暂停/恢复播报,以下是各平台的具体实现方式:

iOS 平台

推荐方案:使用UIAccessibility API暂停/恢复播报

这是苹果官方支持的方式,不会修改系统设置,仅临时中断语音输出,适配所有iOS版本。

  • 录音开始前,立即暂停播报:
// Objective-C
[UIAccessibility pauseSpeakingAtBoundary:UIAccessibilityBoundaryImmediate];
// Swift
UIAccessibility.pauseSpeaking(at: .immediate)
  • 录音结束后,恢复正常播报:
// Objective-C
[UIAccessibility resumeSpeaking];
// Swift
UIAccessibility.resumeSpeaking()

备选方案:临时关闭界面元素的可访问性

如果仅需阻止当前界面元素触发播报,可递归设置元素的isAccessibilityElement属性,录音结束后恢复:

// Swift 示例:递归处理所有子视图
func toggleElementsAccessibility(_ enabled: Bool, for view: UIView) {
    view.isAccessibilityElement = enabled
    view.subviews.forEach { toggleElementsAccessibility(enabled, for: $0) }
}

// 录音启动时调用
toggleElementsAccessibility(false, for: self.view)
// 录音结束时调用
toggleElementsAccessibility(true, for: self.view)

macOS 平台

使用NSAccessibility框架实现同样的暂停/恢复逻辑:

  • 暂停播报:
// Objective-C
[NSAccessibility pauseSpeakingAtBoundary:NSAccessibilityBoundaryImmediate];
// Swift
NSAccessibility.pauseSpeaking(at: .immediate)
  • 恢复播报:
// Objective-C
[NSAccessibility resumeSpeaking];
// Swift
NSAccessibility.resumeSpeaking()

关键注意事项

  • 禁止尝试全局禁用VoiceOver系统开关,这违反苹果无障碍设计规范,且会影响用户的系统级设置。
  • 优先使用暂停/恢复API,这是最稳妥的方案,既能解决录音干扰问题,又能保留用户的无障碍体验。
  • 务必在录音流程的正确节点调用方法:用户触发录音后立即暂停,录音停止后马上恢复,避免影响其他操作的播报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:11