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

5
3个回答

2
这个惊人的新功能并没有突出显示任何内容,但它有一个'accessibilityUserInputLabels'属性:不幸的是,事件名称通知都没有。

等待iOS 13的正式发布,可能会在最终文档中提供一些新闻:像我一样点燃蜡烛。;o)


0

当用户使用语音控制时,如果您需要显示不同的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
  }
}

使用“accessibilityActivate()”非常好,但我不明白如何检测VoiceControl功能正在运行而不是其他东西? - XLE_22
@XLE_22我添加了一个检查来检测它是最可能的语音控制还是完全键盘访问。再次,由于目前没有API支持这一点,所以这只是最佳猜测。 - nickromano

0
这应该可以运行
observe(UIAccessibility.voiceOverStatusDidChangeNotification, selector: #selector(voiceOverStatusDidChange))

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

嘿,普拉巴卡尔,问题是关于语音控制而不是配音。 - undefined
抱歉,我漏掉了那部分! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接