旁白:'accessibilityActivationPoint' 真的有用吗?

VoiceOver : is 'accessibilityActivationPoint' really useful?

我尝试并理解了 accessibilityActivationPoint 的目的,但没有成功。 当激活一个有焦点的可访问元素时,属性 应该指示 VoiceOver 当用户双击该元素时它将激活的特定区域 (Apple reference):对我来说,它始终是所选元素本身。

我了解所选元素被 VoiceOver 视为一个块,无论内部的其他元素如何。一旦双击以激活此块,VoiceOver 将调用 accessibilityActivate 以了解要执行的操作 (Apple reference)。

1/。我通过创建包含开关控件的自定义视图编写了许多测试。无论 accessibilityActivationPoint 内部(或外部另一个开关控件)的值如何,开关控件的值永远不会改变。这是一个正确的用例还是我完全错了?

2/。当我们将许多元素聚集在一个可访问元素中时,VoiceOver 如何能够激活其中一个元素,而这些元素按定义是不可访问的?由于 accessibilityActivationPoint 指出其中之一应该有效吗?

就个人而言,我无法让它发挥作用,我认为我真的混淆了 accessibilityActivationPointaccessibilityActivate

任何帮助将不胜感激,提前致谢。

是的,您对 accessibilityActivateaccessibilityActivationPoint 的想法是正确的。请注意,为了使其正常工作,accessibilityActivationPoint 需要是您尝试在 屏幕上 坐标中激活的控件中的一个点(使用 convert函数!)。

我认为简短的回答是 "yes" 来回答你的第二个问题,但是,为了消除关于辅助功能激活点何时有用的困惑,我将对其进行更详细的介绍。

默认情况下(也就是 AcessibilityActivate() 的默认行为),当 VoiceOver 激活任何视图时,VoiceOver 将向视图的中心发送 "tap gesture"。 "tap gesture" 的位置可以通过更新视图上的 accessibilityActivationPoint 属性来更改。下面,我有一个如何使用此 属性 的示例。

假设您在一些文本旁边有一个空白按钮(在下图中,按钮是灰色框):

出于辅助功能的目的,您可能希望将包含按钮和文本的整个视图设为辅助元素(以便 VoiceOver 用户可以轻松理解按钮与文本相关联 "Worldspace Attest") .在下图中,我使用 Accessibility Inspector 来显示包含这两个元素的视图是一个 Accessibility Element。

请注意,在这些图像中,按钮不在视图的中央,而是在右侧。当您使用 VoiceOver 激活此视图时,该视图将不会 select 按钮;相反,它会将 "tap" 发送到视图的中心(这与点击文本相同,但不会执行任何操作)。为了 select 按钮,您必须将视图的 accessibilityActivationPoint 设置为按钮的屏幕坐标:

view.accessibilityActivationPoint = self.convert(button.center, to: UIApplication.shared.windows.first)

这应该可以让 VoiceOver 用户使用此按钮。

我希望这些信息能消除有关辅助功能激活点的任何困惑 属性。我在上面使用的示例可以在 "Active Control Name" 演示中的 this repository 中找到。