Мне нужно объявить текст всем пользователям моего приложения, когда они выполняют какое-либо действие. Для этого я использую AVSpeechSynthesizer
. Это хорошо работает, если вы не используете VoiceOver для выполнения действия. Поскольку VoiceOver анонсирует информацию о системе, предоставленную пользователю, тогда мой AVSpeechUtterance
будет воспроизводиться одновременно, поэтому голоса перекрываются. Как я могу поставить в очередь мое речевое высказывание, чтобы оно не воспроизводилось до тех пор, пока VoiceOver не закончит говорить?Объявить текст с помощью AVSpeechSynthesizer после того, как VoiceOver перестает говорить текст
1
A
ответ
0
Вы можете достичь этого, наблюдая за действиями VoiceOver. Сначала добавьте закадровый уведомления наблюдателя:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(voiceOverDidStop:) name:UIAccessibilityAnnouncementDidFinishNotification object:nil];
Затем в указанном способе:
-(void)voiceOverDidStop:(NSNotification*)n {
NSString* msg;
NSNumber* finished;
msg = [[n userInfo] objectForKey:UIAccessibilityAnnouncementKeyStringValue];
finished = [[n userInfo] objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful];
if(finished) {
// send the AVSpeechSynthsizer message
}
}
Не забудьте удалить наблюдения перед утилизацией ваше приложение!
Другим способом, который вы можете использовать (если применимо), является редактирование свойств объекта accessibilityLabel
и accessibilityHint
объекта, с которым работает пользователь. Установите эти свойства на @""
, чтобы VoiceOver не знал, что об этом объекте нечего сказать.
Надеется, что это поможет вам, даже если моему ответ пришел довольно поздний: )
1
Проверьте, работает ли VoiceOver и отправьте сообщение UIAccessibilityAnnouncementNotification
, вместо того, чтобы использовать AVSpeechSynthesizer
.
Это не будет работать в этом случае, как мне нужно, чтобы контролировать подачу высказывания и скорость для данного объявления. – Joey
В этом случае я не считаю, что любой существующий API поддерживает ваши требования. – Justin