現在,我的應用程序執行AVSpeechSynthesizer
來讀出每個屏幕的說明。應用程序還會考慮何時啓用了Voiceover輔助功能。如何在配音演講時將文本轉換爲語音,反之亦然?
我現在面臨的問題是文本到語音功能與配音功能重疊。是否有解決方案來檢測當用戶導航到屏幕上的另一個元素時,TTS停止說話,或者當TTS在說話時,在TTS結束之前配音不會說話(前者雖然是首選)。
目前的發展是在iOS 8上,使用Swift。
現在,我的應用程序執行AVSpeechSynthesizer
來讀出每個屏幕的說明。應用程序還會考慮何時啓用了Voiceover輔助功能。如何在配音演講時將文本轉換爲語音,反之亦然?
我現在面臨的問題是文本到語音功能與配音功能重疊。是否有解決方案來檢測當用戶導航到屏幕上的另一個元素時,TTS停止說話,或者當TTS在說話時,在TTS結束之前配音不會說話(前者雖然是首選)。
目前的發展是在iOS 8上,使用Swift。
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
事件來中斷/取消您的通知,並在收到任何活動通知時取消它們。
嗨克里斯!感謝您的建議!但是,我似乎無法找到您正在使用的通知方法。唯一可用的是從[link](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus)。我嘗試覆蓋'accessibilityElementDidLoseFocus()'和 'accessibilityElementDidBecomeFocused()'方法,但在導航到VoiceOver輔助功能模式中的下一個元素時似乎沒有幫助。對此有何想法? –
這不是一種方法。你必須註冊才能收聽通知。如果你不知道這些是什麼,你應該閱讀它們,因爲這個問題的答案超出了這個問題的範圍:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/通知/文章/ Registering.html – ChrisCM
感謝您的澄清克里斯!由於我還不熟悉這一點,我只想澄清一下,'UIAccessibilityElementFocusedNotification'是否可用於iOS8?如果是的話,你是否介意分享如何去執行這個鏈接的鏈接? (: –