Ярлык доступности VoiceOver для Touch ID

Я пытаюсь обеспечить доступность приложения iOS, над которым я работаю, и пытаюсь реализовать VoiceOver, чтобы обеспечить это.

Одна странная вещь, по которой я не могу найти никакой помощи, - это когда отображается представление Touch ID (в моем случае для входа в приложение). VoiceOver произносит ID как слово, а не I.D.

Я попытался реализовать атрибуты доступности как для NSString, так и для объекта LAContext, но, похоже, ни один из них не меняет то, что считывает VoiceOver. Фрагменты кода ниже:

LAContext *context = [[LAContext alloc] init];
[context setIsAccessibilityElement:YES];
[context setAccessibilityLabel:@"TEST 2"];

NSError *error = nil;

NSString *label = @"Please authenticate your ID using the Touch ID";
[label setIsAccessibilityElement:YES];
[label setAccessibilityTraits:UIAccessibilityTraitStaticText];
[label setAccessibilityLabel:@"TEST"];

showingTouchID = TRUE;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:label
                      reply:^(BOOL success, NSError *error) {
......

Результатом VoiceOver с контекстом или без него, имеющим атрибуты доступности, всегда является текст метки.

Любая помощь очень ценится :)


person GarryW    schedule 14.10.2015    source источник


Ответы (3)


Вы определенно не должны изменять метку доступности только для того, чтобы VoiceOver правильно произносил слова (т. Е. Не пытайтесь «взломать» произношение метки). Причина в том, что VoiceOver не поддерживает только речевой вывод; у него также есть вывод Брайля, где слепые пользователи ожидают читать вещи точно по буквам в том виде, в каком они написаны (т.е. видеть точно все пробелы, заглавные / строчные буквы и т. д.). напишите «ID» вместо «ID», тогда, хотя VoiceOver, возможно, произнесет это правильно (в конкретной версии iOS), слепые пользователи, прочитав «ID» на брайлевском дисплее, могут подумать, что это действительно так. и появляются, скажем так, непрофессионально, когда они затем используют это неправильное написание в письменных беседах с другими людьми.

Правильный способ справиться с этим, хотя и не предлагая немедленного решения:

  1. Сообщите Apple об ошибке в произношении определенного слова определенным голосом на определенном языке (например, «Ожидаемое произношение: [aj'di:]» vs. «Фактическое произношение: [id]»)
  2. Сообщите об ошибке в Apple, чтобы запросить возможность настройки только произношения (то есть, где вы оставите метку доступности нетронутой и исправите, но укажите голосу, как он должен произносить определенную часть текста), и где эта настройка может быть сделана для переводчик переводит строки на каждый язык индивидуально (поскольку неправильное произношение зависит от языка) - также см. следующий пункт.
  3. Если вы можете перефразировать, попробуйте другое слово, отличное от проблемного (что кажется неприменимым в случае «Touch ID», который является установленным термином). Но это тоже хитрость, так как он решает только английский оригинал и не заботится о переводах, где изменение формулировки может, наоборот, потенциально усложнить произношение.

Извините за плохие новости.

Наконец, здесь, как на iOS 8.4.1, так и на iOS 9.0.2, VoiceOver с голосом iOS по умолчанию на английском языке (США), по крайней мере, на этой веб-странице, произносит «ID» в «Touch ID» как [ajdi:], а не [id].

person Boris Dušek    schedule 14.10.2015

Вы можете попробовать это для быстрого обхода: просто оставьте пространство между I и D

  NSString *label = @"Please authenticate your ID using the Touch ID";
  label.accessibilityLabel=@"Please authenticate your I D using the Touch I D";

Также обратите внимание, что вы можете установить доступность только для UIElements и не можете установить ее для общих переменных. Нет смысла устанавливать метку доступности для LAContext и NSString.

Вам необходимо установить метку доступности для UILabel или элемента, которому вы даете NSString.

person Teja Nandamuri    schedule 14.10.2015
comment
Спасибо, мистер Т. Проблема здесь, похоже, в том, что LAContext имеет дело с представлением подсказки Touch ID пользователю, поэтому единственное, что я могу настроить, - это localizedReason. Это NSString и не может быть ничем другим. Вот почему я пытался добавить к нему метку доступности. Похоже, как предположил @boris, дефект в произношении, поэтому я сообщу об ошибке в Apple. - person GarryW; 15.10.2015

Начиная с iOS 11, вы можете установить accessibilityAttributedLabel элемента и использовать клавиша UIAccessibilitySpeechAttributeIPANotation (Swift: NSAttributedString.Key.accessibilitySpeechIPANotation), чтобы указать произношение для диапазона строки с атрибутами.

Дополнительные инструменты, которые можно используйте для настройки того, как VoiceOver читает ваш текст.

person Jeremy W. Sherman    schedule 01.08.2019