在画外音中注册 UIGestureRecognizer 动作

Registering UIGestureRecognizer actions in voice over

我有一个标准 UIViewController 并注册了一个 UISwipeGestureRecognizer,在我的 viewDidLoad 覆盖中将视图委托给它。

手势正确注册并调用适当的动作,但是当画外音打开时不会发生这种情况。

UIGestureRecognizer 是否仅适用于 iOS 中的标准用法?有没有办法让语音注册 这些手势,无论是双击、滑动、pinch/zoom 等?

弄清楚这是如何工作的,我认为值得分享:

在查看 UIView classes 以及 UIAccessibilityTraits 之后,所有 UIViews 及其子 classes 都有一个使用各种 UIAccessibilityTraits 的位掩码,可用于: - 指定 UIView 或任何采用 UIAccessibility 协议的 class 的标准行为。 -允许各种配置,例如刷新速度、启用滑块类型行为等

这里是所有可用特征的 link: https://developer.apple.com/reference/uikit/uiaccessibility/accessibility_traits

对于我的具体情况,我使用了 UIAccessibilityTraitAllowsDirectInteraction 和 UIAccessibilityTraitUpdatesFrequently。然后所有 UIGestureRecognizers 都正确注册,无论是滑动、点击、捏合等

它们需要指定为位掩码,因此如果您需要一个元素具有这些属性,请输入:

myView.UIAccessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction | UIAccessibilityTraitUpdatesFrequently

已编译,运行 应用程序和我得到的视图告诉我它是什么,并正确滑动寄存器而不会在出现问题时发出 "bonk" 声音。

希望这对那些也想知道如何让它工作的人有所帮助,但这也可能与自定义视图略有冲突,具体取决于您希望视力正常或视力受损的用户如何体验 UI。但是,我发现这种方式比创建一整套 UI 元素只是为了适应语音使用更优雅,因为交互方法保持不变,并且无需编写代码来提示或解释要做什么。