如何轉換使用者語音指令為文字輸入
WatchKit最有趣的特性之一 ——將使用者語音指令轉換成文字輸入——卻是討論最少的。讓我們起個頭。
對我說話
處理對話的是一個標準模態框,在你當前WKInterfaceController呼叫
presentTextInputControllerWithSuggestions:allowedInputMode:completion:
1 2 3 |
[self presentTextInputControllerWithSuggestions:nil allowedInputMode:WKTextInputModeAllowAnimatedEmoji completion:^(NSArray *results) { // Do whatever you like with the array of results. }]; |
控制器是非同步執行的,等待使用者按“完成”並確認他們的輸入。確認之後,主執行緒執行完成模組,之後你可以隨意使用提供的結果。
你總是應該在你WatchKit擴充的主執行緒中呼叫
建議
當語音輸入控制器出現時,你也可以選擇提供一個NSString物件的序列,給使用者提供輸入建議。例如在一個訊息應用裡,你也許想要給使用者一些他們可以發給朋友的常見回覆。
1 2 3 4 5 6 7 8 9 |
NSArray *suggestions = @[ @"Cool!", @"See you there!", @"On my way!" ]; [self presentTextInputControllerWithSuggestions:suggestions allowedInputMode:WKTextInputModeAllowAnimatedEmoji completion:^(NSArray *results) { // Do whatever you like with the array of results. }]; |
輸入模式
你需要從三種WKTextInputMode中選擇一個展現給使用者。
- WKTextInputModePlain:只有語音/建議文字。沒有emoji表情。emoji按鈕會被隱藏。
- WKTextInputModeAllowEmoji:語音,建議文字,以及非動畫的emoji
- WKTextInputModeAllowAnimatedEmoji:語音,建議文字和所有emoji
如果你跳過提供建議的步驟並且設定輸入模式為WKTextInputModePlain,使用者會直接進入語音輸入介面。
輸入處理
輸入處理模組會從使用者那兒收到一個包含輸入的NSArray。如果沒接到輸入時模態框就被取消了,這個array序列為nil。一般情況下,這個array會包含一個表示文字輸入的NSString物件。
但是,如果你允許使用者輸入emoji,它也可以包含一個NSData物件,對應一個emoji圖片。你可以用這個NSData物件生成一個UIImage,或者直接在WKInterfaceImage裡使用。
由於文字輸入介面是彈出的模態框,WKInterfaceController會在完成模組被呼叫之前重新被啟用。
模擬器
涉及到在模擬器中測試指令,還有幾點需要提一下:
- 雖然你可以隨意指定輸入模式,模擬器只支援選擇建議的字串進行文字輸入。你不可以用麥克風說話並將它轉換成文字。類似地,模擬器不支援選擇任何emoji。
- 指令螢幕會是空白的。要知道,用在真正的表上的時候,語音輸入模組會立即啟動。使用者需要點選“完成”按鈕來確認指令文字,之後指令才會傳回你的應用。