使用听写 – iOS 6 – DidStart?

使用听写 – iOS 6 – DidStart?,第1张

概述如何回应开始听写? 回应听写的已知方法: > dictationRecordingDidEnd – 响应完成对口述的承认 短语. > dictationRecognitionFailed – 响应失败的听写识别. 参考:UITextInput协议参考 从iOS 5.1开始,当用户在支持的设备上选择听写输入时,系统会自动将识别的短语插入当前文本视图中. UITextInput协议中的方法允许您的应用 如何回应开始听写?

回应听写的已知方法:

> dictationRecordingDIDEnd – 响应完成对口述的承认
短语.
> dictationRecognitionFailed – 响应失败的听写识别.

参考:UITextinput协议参考

从iOS 5.1开始,当用户在支持的设备上选择听写输入时,系统会自动将识别的短语插入当前文本视图中. UITextinput协议中的方法允许您的应用程序响应完成听写,如“使用听写”中所述.您可以使用UIDictationPhrase类的对象来获取表示用户已指定的短语的字符串.在不明确的听写结果的情况下,听写短语对象提供包含替代字符串的数组.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInput_Protocol/Reference/Reference.html

解决方法 据我所知,没有用于检测听写何时开始的公共API.

如果你真的想这样做,并且想要进入App Store,你可能会采用以下方法,但它完全不受支持,它可能会让你被拒绝,并且很可能会在未来中断iOS版本.

在更改到或从指令“键盘”更改之后,文本系统发布一些未记录的通知.它们中的两个都发布了对它的更改以及对它的更改,并使用以下名称:

> UIKeyboardCandIDateCorrectionDIDChangeNotification
> UIKeyboardLayoutDIDChangednotification

请注意,第二个具有奇怪的动词共轭.那不是拼写错误. (好吧,这不是我的错字.)

这些通知也会在其他时间发布,因此您不能只是观察它们并假设听写状态已经改变.收到通知后,您需要进行更多检查.因此,将自己添加为其中一个通知的观察者.第一个似乎不太可能在将来消失或重命名.

- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    [[NSNotificationCenter defaultCenter] addobserver:self        selector:@selector(checkForDictationKeyboard:)        name:@"UIKeyboardCandIDateCorrectionDIDChangeNotification"        object:nil];    ...

收到通知后,您需要查看听写视图是否显示:

- (voID)checkForDictationKeyboard:(NSNotification *)note {    if ([self isShowingDictationVIEw]) {        NSLog(@"showing dictation vIEw");    } else {        NSLog(@"not showing dictation vIEw");    }}

要查看它是否显示,请检查除您自己的应用程序窗口之外的每个窗口.通常,唯一的其他窗口是文本系统的窗口.

- (BOol)isShowingDictationVIEw {    for (UIWindow *window in [UIApplication sharedApplication].windows) {        if (window == self.window)            continue;        if (containsDictationVIEw(window))            return YES;    }    return NO;}

递归地遍历视图层次结构,检查其类名称包含字符串“DictationVIEw”的视图.实际的类名是UIDictationVIEw,但是如果不使用整个名称,则不太可能从App Store中拒绝.

static BOol containsDictationVIEw(UIVIEw *vIEw) {    if (strstr(class_getname(vIEw.class),"DictationVIEw") != NulL)        return YES;    for (UIVIEw *subvIEw in vIEw.subvIEws) {        if (containsDictationVIEw(subvIEw))            return YES;    }    return NO;}
总结

以上是内存溢出为你收集整理的使用听写 – iOS 6 – DidStart?全部内容,希望文章能够帮你解决使用听写 – iOS 6 – DidStart?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1098823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存