Я пишу очень простую игру, которая разработана специально для слепых пользователей, но может также использоваться зрячими пользователями. Он использует много кнопок в качестве элементов, однако слепые пользователи взаимодействуют с этими кнопками с помощью пользовательских жестов (панорамирование, касание и т. Д.), Поэтому стандартное взаимодействие закадрового голоса не подходит.
Проблема заключается в том, что на экране вообще нет объектов специальных возможностей, поэтому при загрузке игры голос за кадром начинает читать надписи на кнопках (например, «Возможный текст: назад, меню ...»). Эти кнопки читаются независимо от того, что они не включены. Я также не могу удалить большинство из них для слепых пользователей.
Я попытался отключить доступность элементов, сняв флажок «кнопка» из черт доступности, все позволяет выбирать прямое взаимодействие, я попробовал .accessibilityElementsHidden, все предложения из Как исключить UIButton из VoiceOver? и, кажется, ничего не работает.
Мое текущее решение имеет четкую UILabel без текста, для него задан единственный элемент в массиве .accessibilityElements, а затем для хорошей меры я публикую уведомление об изменении экрана доступности с этой меткой в качестве объекта, чтобы он стал фокусируется, затем я жду секунду в асинхронной очереди отправки после вызова, полностью удаляю метку и возвращаю фокус в основной экран, чтобы пользователь мог взаимодействовать.
Вот пример моего текущего решения:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.accessibilityElements = [lblVoiceOver!]
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIAccessibility.post(notification: .screenChanged, argument: lblVoiceOver)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.lblVoiceOver.removeFromSuperview()
UIAccessibility.post(notification: .screenChanged, argument: self.view)
}
}
Это, в лучшем случае, глупый взлом, и мне бы хотелось реализовать реальное решение, которое просто предотвращает чтение «Возможного текста» закадровым переводом. Я полагаю, что возможная текстовая функция была добавлена в iOS 11, чтобы помочь приложениям, которые не написаны с учетом доступности, быть более дружественными, но до сих пор я не нашел способа отключить это.