2015-10-05 37 views
5

W tej chwili moja aplikacja implementuje AVSpeechSynthesizer, aby przeczytać instrukcje dla każdego ekranu. Aplikacja bierze również pod uwagę, gdy włączona jest funkcja dostępu głosowego.Jak zatrzymać przekazywanie tekstu na mowę, gdy mówi głosowo, lub odwrotnie w Swift?

Problem w którym obecnie stoję, polega na tym, że funkcja zamiany tekstu na mowę pokrywa się z funkcją lektora. Czy istnieje rozwiązanie pozwalające wykryć, że kiedy użytkownik przechodzi do innego elementu na ekranie, TTS przestaje mówić, lub gdy mówi TTS, lektor nie mówi, dopóki nie zakończy się TTS (preferowane jest pierwsze).

Obecny rozwój jest na iOS 8, używając Swift.

Odpowiedz

4

WARIANT 1

Można słuchać, gdy nowe elementy skupiają obserwując UIAccessibilityElementFocusedNotification powiadomienia

[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager 
             selector:@selector(interruptTTSFunction:) 
              name:UIAccessibilityElementFocusedNotification 
              object:nil]; 

i przerwania niestandardowych komunikatów syntezy mowy, gdy są one odbierane.

Zalety: Daje użytkownikowi VoiceOver dużą kontrolę.

Minusy: Nie wiesz, kiedy skończy się VoiceOver, czytając nowo nastawioną kontrolkę, więc nie możesz jej użyć do przerwania i ponownego uruchomienia anonsów.

WARIANT 2

Można powiedzieć VoiceOver, aby zatrzymać i wznowić zamieszczając

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 

przed swoim ogłoszeniu i

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 

po jej zakończeniu.

Zalety: Twoje ogłoszenie zostanie odczytane w całości.

Minusy: Po wstrzymaniu VoiceOver przejmujesz kontrolę nad użytkownikami.

poleca

Jeżeli ogłoszenia są krótkie, wstrzymywanie i wznawianie AT nie jest straszny rozwiązaniem. W przeciwnym razie zalecamy zezwolenie użytkownikom VoiceOver na przerwanie/anulowanie powiadomień przez odsłuchiwanie zdarzeń UIAccessibilityElementFocusedNotification i anulowanie wszystkich aktywnych ogłoszeń po ich otrzymaniu.

+0

Cześć Chris! Dzięki za Twoją sugestię! Jednak nie mogę znaleźć metody powiadomień, której używasz. Jedyne dostępne do użycia są z tego [link] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus). Próbowałem również przesłonić metody 'accessibilityElementDidLoseFocus()' i 'accessibilityElementDidBecomeFocused()', ale nie jest to pomocne, gdy przechodzę do następnego elementu w trybie dostępności VoiceOver. Jakieś pomysły na ten temat? –

+0

To wcale nie jest metoda. Musisz się zarejestrować, aby wysłuchać powiadomień. Jeśli nie wiesz, co to jest, powinieneś o nich przeczytać, ponieważ odpowiedź na to pytanie wykracza poza zakres tego pytania: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ Powiadomienia/Artykuły/Rejestracja.html – ChrisCM

+0

Dzięki za wyjaśnienie Chris!Jako że wciąż jestem na tym początku, chciałbym tylko wyjaśnić, czy "UIAccessibilityElementFocusedNotification" jest dostępne do użycia w iOS8? A jeśli tak, czy nie masz nic przeciwko udostępnieniu linku, jak to zrobić? (: –