我想问一下如何在启用VoiceOver的情况下按需设计语音帮助。

我有这样的代码来创建UIButton:

_myLocationButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_myLocationButton setImage:[UIImage imageNamed:@"my_location_icon"] forState:UIControlStateNormal];
_myLocationButton.accessibilityLabel = @"My location";
_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";
[_myLocationButton addTarget:self
                      action:@selector(myLocationButtonPressed)
            forControlEvents:UIControlEventTouchUpInside];

现在在myLocationButtonPressed方法中,我有这样的代码:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, positionDescription);

我的问题是。当我尝试双击myLocationButton处于 Activity 状态时,VoiceOver只说:“我的位置”。我想要的是双击后我想听到positionDescription而不是按钮accessibilityLabel。我知道该方法myLocationButtonPressed正在调用,但是出于未知原因,发布UIAccessibilityAnnouncementNotification事件不执行任何操作,而且我听不到任何声音。

有人可以给我一些如何解决此类问题的建议。

最佳答案

我发现获得一致读出的公告的唯一方法是延迟发布通知。此功能应有帮助。

- (void)postVoiceOverAnnouncement:(NSString*)message withDelay:(int)seconds {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(seconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"This will get read out");
    });
}

即使添加了启动媒体 session 特征,某些内容仍在中断播报。您需要注意的是延迟的时间。如果有人继续在您的应用中滑动,他们可能会中断公告。但是,由于在正确访问的应用程序中,此信息应在其他位置可用,因此他们应该能够再次找到它。当然,这只是一个有用的公告,以免将注意力转移到毫无戒心的VoiceOver用户上:)。

我注意到您的代码的另一个问题:
_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";

首先,包括这么详细的提示,真是太好了!但是,您不应该包括“双击...”部分。用户知道如何通过VoiceOver与按钮进行交互。这是与之互动的唯一方法吗?还是也可以在外接键盘上按Enter键?假设选择手势是其他交互作用的其他假设AT又如何呢?这个提示对使用盲文板的人有多大帮助呢?只需告知用户与对象进行交互的后果,让AT负责其余的工作。

关于ios - 启用VoiceOver时按需提供UIButton语音帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32334096/

10-13 02:46