2015-10-05 39 views
5

現在,我的應用程序執行AVSpeechSynthesizer來讀出每個屏幕的說明。應用程序還會考慮何時啓用了Voiceover輔助功能。如何在配音演講時將文本轉換爲語音,反之亦然?

我現在面臨的問題是文本到語音功能與配音功能重疊。是否有解決方案來檢測當用戶導航到屏幕上的另一個元素時,TTS停止說話,或者當TTS在說話時,在TTS結束之前配音不會說話(前者雖然是首選)。

目前的發展是在iOS 8上,使用Swift。

回答

4

OPTION 1

你可以聽新元素時,通過觀察UIAccessibilityElementFocusedNotification通知

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

,並在收到時打斷您的自定義語音合成公告傾心爲。

優點:爲VoiceOver用戶提供很多控制。

缺點:您不知道VoiceOver何時完成讀取新聚焦的控制,因此您不能使用它來中斷和重新啓動通知。

OPTION 2

您可以通過發佈

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 
您公佈前

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 

後,它是完整的告訴VoiceOver的暫停和重新啓動。

優點:您的公告將被全部閱讀。

缺點:當您暫停VoiceOver時,您可以控制用戶的手。

RECOMENDATION

如果您的公告很短,暫停和恢復的AT是不是一個可怕的解決方案。否則,我會建議允許VoiceOver用戶通過偵聽UIAccessibilityElementFocusedNotification事件來中斷/取消您的通知,並在收到任何活動通知時取消它們。

+0

嗨克里斯!感謝您的建議!但是,我似乎無法找到您正在使用的通知方法。唯一可用的是從[link](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus)。我嘗試覆蓋'accessibilityElementDidLoseFocus()'和 'accessibilityElementDidBecomeFocused()'方法,但在導航到VoiceOver輔助功能模式中的下一個元素時似乎沒有幫助。對此有何想法? –

+0

這不是一種方法。你必須註冊才能收聽通知。如果你不知道這些是什麼,你應該閱讀它們,因爲這個問題的答案超出了這個問題的範圍:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/通知/文章/ Registering.html – ChrisCM

+0

感謝您的澄清克里斯!由於我還不熟悉這一點,我只想澄清一下,'UIAccessibilityElementFocusedNotification'是否可用於iOS8?如果是的話,你是否介意分享如何去執行這個鏈接的鏈接? (: –

相關問題