我想问一下如何在启用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/