我试图确定发布 UIAccessibilityLayoutChangedNotification 时究竟发生了什么不同, 和 UIAccessibilityScreenChangedNotification .据我所知,我可以在任何地方互换使用它们,没有什么不同。
Apple 文档只是说使用 LayoutChanged当(例如)一个元素被隐藏或显示时,使用 ScreenChanged如果整个屏幕发生变化,但我对他们在我提供这些信息时做了什么感兴趣,以及在使用其中一个或另一个时我应该看到的不同。
任何人都可以清楚地解释两者之间的实现差异吗?
最佳答案
这两个通知用于 View 上的动态内容,并将这些更改传达给屏幕阅读器用户的 VoiceOver。这两个通知之间几乎没有什么区别,除了它们的默认行为,以及 ScreenChange 通知的愚蠢的小“boop beep”。
在这两种情况下,论证
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, arg);
UIAccessibilityLayoutChangedNotification 提供 nil就好像你什么也没做。如果你为 UIAccessibilityScreenChangedNotification 提供一个 nil 参数一旦所有 View 层次结构更改和绘图完成,它会将焦点发送到 View 层次结构中标记为可访问性元素的第一个 UIObject。UIAccessibilityLayoutChangedNotification 的一个很好的用例示例用于动态表单。您想让用户知道,根据他们在表单中做出的决定,可以使用新选项。例如,如果在表单中选择您是退伍军人,则表单的其他区域可能会弹出以提供更多输入,但这些区域可能已对其他不关心它们的用户隐藏。因此,您可以在用户交互后将重点转移到这些元素上:UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstNewFormElement);
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, @"Veterans form elements available");
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
UIAccessibilityScreenChangedNotification 的一个很好的用例示例是定制的标签式浏览情况。当整个屏幕(导航区域除外)发生变化时。您想让画外音知道基本上整个屏幕都发生了变化,但不是聚焦第一个元素(您的第一个选项卡)而是聚焦第一个内容元素。UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstNonGlobalNavElement);
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"You're on a new tab");
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil);
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstA11yElement);
UIAccessibilityContainer协议(protocol),你可以观察你的 View 容器被查询。没有缓存正在进行。甚至 accessibilityElementCount每次 VoiceOver 将焦点更改为容器内的新 AccessibilityElement 时,都会 ping 属性。然后它经历检查它在哪个元素上的过程,请求下一个元素,等等。它的核心设计是为了处理动态情况。如果您在交互后将一个新元素插入到您的容器中,它仍然会通过所有这些查询并且很好!此外,如果您覆盖 UIAccessibility 协议(protocol)的属性,为了提供动态提示和标签,您还可以看到这些函数每次都被调用!因此,我相信 A11y 框架后端从这些通知中收集到的信息绝对为零。 VoiceOver 需要完成它的工作的唯一信息是它当前的焦点辅助功能元素,而这个元素是辅助功能容器。通知只是为了让您的应用程序更适合 VoiceOver 用户使用。关于ios - UIAccessibilityLayoutChangedNotification 和 UIAccessibilityScreenChangedNotification 之间的实际区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797515/