swift iOS 13:如何检测“语音控制”正在运行

xyhw6mcr  于 2023-09-30  发布在  Swift
关注(0)|答案(3)|浏览(129)

iOS 13中是否有类似UIAccessibility.isVoiceOverRunning的API来检测语音控制是否运行?我在当前的beta docs中找不到任何东西。
语音控制:https://www.apple.com/ios/ios-13-preview/features/(参见“可访问性”部分)。

stszievb

stszievb1#

除了它的**'accessibilityUserInputLabels'**属性之外,这个令人惊叹的新功能没有什么值得强调的:不幸的是,既没有事件名称也没有通知。
等待iOS 13的正式发布,它可能会在最终文档中提供一些消息:像我一样点燃蜡烛;o)

w1jd8yoj

w1jd8yoj2#

当用户处于“语音控制”模式时,需要显示不同的UI时,以下是一种解决方法。
由于没有像UIAccessibility.isVoiceOverRunning这样的API用于语音控制,因此您需要覆盖accessibilityActivate,以了解用户何时使用辅助功能与您的应用进行交互。

class Button: UIButton {

  override init(frame: CGRect) {
    super.init(frame: frame)

    addTarget(self, action: #selector(handleTouchUpInside), for: .touchUpInside)
  }

  override func accessibilityActivate() -> Bool {
    // Launch more accessible UI
    if UIAccessibility.isVoiceOverRunning {
      // VoiceOver
    } else if UIAccessibility.isSwitchControlRunning {
      // Switch Control
    } else {
      // Probably used Voice Control or Full Keyboard Access
    }
    return true
  }

  @objc func handleTouchUpInside() {
    // Standard interaction - continue to show default UI
  }
}
ezykj2lf

ezykj2lf3#

这应该工作

observe(UIAccessibility.voiceOverStatusDidChangeNotification, selector: #selector(voiceOverStatusDidChange))

@objc private func voiceOverStatusDidChange() {
    if UIAccessibility.isVoiceOverRunning {
      // do something
    }
}

相关问题