2015-03-28 1 views
1

Мне нужно объявить текст всем пользователям моего приложения, когда они выполняют какое-либо действие. Для этого я использую AVSpeechSynthesizer. Это хорошо работает, если вы не используете VoiceOver для выполнения действия. Поскольку VoiceOver анонсирует информацию о системе, предоставленную пользователю, тогда мой AVSpeechUtterance будет воспроизводиться одновременно, поэтому голоса перекрываются. Как я могу поставить в очередь мое речевое высказывание, чтобы оно не воспроизводилось до тех пор, пока VoiceOver не закончит говорить?Объявить текст с помощью AVSpeechSynthesizer после того, как VoiceOver перестает говорить текст

ответ

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.

+0

Это не будет работать в этом случае, как мне нужно, чтобы контролировать подачу высказывания и скорость для данного объявления. – Joey

+0

В этом случае я не считаю, что любой существующий API поддерживает ваши требования. – Justin