2015-10-05 43 views
5

In questo momento, la mia app implementa AVSpeechSynthesizer per leggere le istruzioni per ogni schermata. L'app tiene anche in considerazione quando la funzionalità di accessibilità Voiceover è abilitata.Come interrompere Text to Speech quando Voiceover sta parlando o viceversa in Swift?

Il problema che sto affrontando ora è che la funzione di sintesi vocale si sovrappone alla funzione di voce fuori campo. C'è una soluzione per rilevare che quando un utente naviga verso un altro elemento sullo schermo, TTS smette di parlare, o quando TTS sta parlando, la voce fuori campo non parla fino a quando non termina TTS (il primo è preferito però).

Lo sviluppo attuale è su iOS 8, utilizzando Swift.

risposta

4

OPZIONE 1

Si potrebbe ascoltare per quando nuovi elementi si concentrano osservando UIAccessibilityElementFocusedNotification notifiche

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

e interrompere i vostri annunci di sintesi vocale personalizzati quando vengono ricevuti.

Pro: Dà all'utente il controllo di VoiceOver.

Contro: Non si sa quando VoiceOver ha finito di leggere il controllo appena messo a fuoco, quindi non è possibile utilizzarlo per interrompere e riavviare gli annunci.

OPZIONE 2

Si può dire VoiceOver per mettere in pausa e riavviare inviando

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 

prima del tuo annuncio e

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 

dopo che è stata completata.

Pro: Il tuo annuncio verrà letto nella sua interezza.

Contro: Prendi il controllo dalle mani degli utenti quando metti in pausa VoiceOver.

raccomandazione

Se i tuoi annunci sono brevi, pausa e riprendere la AT non è una soluzione terribile. Altrimenti, ti consiglio di consentire agli utenti di VoiceOver di interrompere/annullare i tuoi annunci ascoltando gli eventi UIAccessibilityElementFocusedNotification e annullando eventuali annunci attivi quando vengono ricevuti.

+0

Ciao Chris! Grazie per il tuo suggerimento! Tuttavia, non riesco a trovare il metodo di notifica che stai utilizzando. Gli unici disponibili da utilizzare sono [questo link] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus). Ho provato a sovrascrivere anche i metodi 'accessibilityElementDidLoseFocus()' e 'accessibilityElementDidBecomeFocused()', ma non sembra essere di aiuto quando passo all'elemento successivo nella modalità di accessibilità di VoiceOver. Qualche idea su questo? –

+0

Non è affatto un metodo. Devi registrarti per ascoltare le notifiche. Se non sai cosa sono questi dovresti leggere su di loro, dato che la risposta a questo è al di fuori dello scopo di questa domanda: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ Notifiche/Articoli/Registrazione.html – ChrisCM

+0

Grazie per il chiarimento Chris!Dato che sono ancora nuovo a questo, vorrei semplicemente chiarire se 'UIAccessibilityElementFocusedNotification' è disponibile per l'uso su iOS8? E se sì, ti dispiace condividere un link su come comportarti? (: –