Apple Watch如何获得文本输入?

1035 查看

如何转换用户语音指令为文本输入

WatchKit最有趣的特性之一 ——将用户语音指令转换成文本输入——却是讨论最少的。让我们起个头。

对我说话

处理对话的是一个标准模态框,在你当前WKInterfaceController调用

presentTextInputControllerWithSuggestions:allowedInputMode:completion:

控制器是异步运行的,等待用户按“完成”并确认他们的输入。确认之后,主线程执行完成模块,之后你可以随意使用提供的结果。

你总是应该在你WatchKit拓展的主线程中调用

建议

当语音输入控制器出现时,你也可以选择提供一个NSString对象的序列,给用户提供输入建议。例如在一个消息应用里,你也许想要给用户一些他们可以发给朋友的常见回复。

输入模式

你需要从三种WKTextInputMode中选择一个展现给用户。

  • WKTextInputModePlain:只有语音/建议文字。没有emoji表情。emoji按钮会被隐藏。
  • WKTextInputModeAllowEmoji:语音,建议文字,以及非动画的emoji
  • WKTextInputModeAllowAnimatedEmoji:语音,建议文字和所有emoji

如果你跳过提供建议的步骤并且设置输入模式为WKTextInputModePlain,用户会直接进入语音输入界面。

输入处理

输入处理模块会从用户那儿收到一个包含输入的NSArray。如果没接到输入时模态框就被取消了,这个array序列为nil。一般情况下,这个array会包含一个表示文字输入的NSString对象。

但是,如果你允许用户输入emoji,它也可以包含一个NSData对象,对应一个emoji图片。你可以用这个NSData对象生成一个UIImage,或者直接在WKInterfaceImage里使用。

由于文本输入界面是弹出的模态框,WKInterfaceController会在完成模块被调用之前重新被激活。

模拟器

涉及到在模拟器中测试指令,还有几点需要提一下:

  • 虽然你可以随意指定输入模式,模拟器只支持选择建议的字符串进行文字输入。你不可以用麦克风说话并将它转换成文本。类似地,模拟器不支持选择任何emoji。
  • 指令屏幕会是空白的。要知道,用在真正的表上的时候,语音输入模块会立即启动。用户需要点击“完成”按钮来确认指令文字,之后指令才会传回你的应用。