Проблема с синхронизацией UIAccessibilityAnnouncementNotification

Я заметил, что метод уведомления UIAccessibility является своего рода асинхронным вызовом. Это звучит для меня совершенно правильно, потому что вам нужно услышать последние события, а не те, которые произошли вчера... Но посмотрите на этот пример:

UIAccessibilityPostNotification( UIAccessibilityAnnouncementNotification, @"String 1");
UIAccessibilityPostNotification( UIAccessibilityAnnouncementNotification, @"String 2");

Вы можете услышать только «струну 2».

Этот пример довольно прост, вы могли бы ответить, что можно добавить «строку 2» к «строке 1», и проблема решена. Но я в такой ситуации, но я не могу добавить две строки.

Мой вопрос: есть ли способ синхронизации уведомлений?

Другой пример следующий. Допустим, у вас есть приложение с панелью вкладок. Когда вы переключаетесь на определенную панель, я хочу, чтобы VoiceOver произносил определенный текст. Как вы, вероятно, знаете, когда вы выбираете вкладку, VoiceOver говорит что-то вроде «Выбрана полоса Bar1».

Итак... объявление VoiceOver закрывает мой собственный текст.


person Altair Jones    schedule 10.09.2012    source источник
comment
Привет, ты смог решить проблему в ios 5? У меня похожие проблемы и мне нужна поддержка ios 5   -  person stephen    schedule 23.11.2012
comment
@AltairJones Вам удалось решить проблему? Если да, то как?   -  person Autonomous    schedule 08.04.2015


Ответы (2)


Для iOS 6.0+ вы можете использовать UIAccessibilityAnnouncementDidFinishNotification для синхронизации ваших объявлений.

person Shatlyk Ashyralyyev    schedule 07.11.2012
comment
Спасибо... К сожалению, когда я написал этот вопрос, мое приложение было совместимо только с iOS5. С момента выпуска ios6 я обновил проект и воспользовался вашим методом. Круто от Apple, очень нужно было! - person Altair Jones; 08.11.2012
comment
Я пытаюсь зарегистрировать обработчик для UIAccessibilityAnnouncementDidFinishNotification, но не могу заставить его срабатывать, хотя VoiceOver читает, а я использую iOS 6.1. Любые идеи? - person abellina; 07.02.2013
comment
У меня такая же проблема. Из моего тестирования видно, что UIAccessibilityAnnouncementDidFinishNotification отправляется только для объявлений, которые вы делаете вручную, путем публикации UIAccessibilityAnnouncementNotification. Он не запускается для обычных объявлений элементов пользовательского интерфейса, сделанных автоматически из атрибутов доступности. - person cidered; 03.04.2013
comment
К сожалению, это уведомление запускается, только если вы публикуете UIAccessibilityAnnouncementNotification, в противном случае вы не получите уведомление после того, как VoiceOver закончит чтение. Это делает уведомление гораздо менее полезным, потому что смысл в том, чтобы иметь возможность синхронизировать все объявления VO. Теперь я знаю, почему мало игр, доступных пользователям ВО. - person mota; 04.04.2013
comment
Это еще хуже. Если пользователь коснется любого доступного элемента во время произнесения вашего текста, вы даже не получите готовое уведомление о своем собственном тексте! Это определенно ошибка в iOS 6.1. - person marcelnijman; 20.04.2013
comment
@Morta @marcelnijman Реализовать протокол UIAccessibilityFocus. Он имеет метод accessibilityElementDidBecomeFocused - person user1046037; 30.11.2014
comment
Это предназначено для предоставления текста специальных возможностей в момент фокуса, а не для его предоставления заранее. Это не решает проблему синхронизации, как это было с вопросом ОП. - person marcelnijman; 01.12.2014
comment
@marcelnijman, похоже, что по крайней мере в iOS 9 уведомление запускается в этом случае с ключом в userInfo из UIAccessibilityAnnouncementKeyWasSuccessful. Но да, похоже, это происходит только с объявлениями, размещенными вручную или системой, а не между визуальными элементами. :( - person Mr Rogers; 05.05.2016

Начиная с iOS 11, новые атрибутированные свойства специальных возможностей были введены, включая специальную клавишу accessibilitySpeechQueueAnnouncement, которая позволяет поставить объявление в очередь или прервать текущую речь.

Однако, если вы отправляете много уведомлений и VoiceOver должен взять на себя (например, пользователь проводит пальцем, чтобы сфокусироваться на новом элементе), уведомления, которые не были озвучены, будут удалены, как только система озвучит атрибуты элемента (ответ stackoverflow).

На мой взгляд, в настоящее время это лучший способ синхронизации уведомлений.

И для вашего второго запроса о панелях вкладок можно написать новый специальный вопрос...

person XLE_22    schedule 06.12.2018