我试图让AVSpeechSynthesizer
在UITextView
中读取用户的文本选择。当我双击一个单词时,它的效果很好,但是每当我尝试选择多个单词时,AVSpeechSynthesizer
就会开始以一种奇怪的方式说单词。有没有办法防止这种行为或仅在用户释放选择手指时检索用户的文本选择?
任何帮助将不胜感激。
这是我做的:
-(void) textViewDidChangeSelection:(UITextView *)textView{
NSRange r = textView.selectedRange;
if (!(r.length == 0)) {
NSString *selText = [self.entryTextField2.text substringWithRange:r];
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:selText];
[utterance setRate:0.5f];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:self.selectedSpeakerLanguage];
[self.synthesizer speakUtterance:utterance];
}
}
我想我应该从一开始就以苹果的方式或至少以 IOS 的方式完成。直接从textViewDidChangeSelection中读取选定的范围:绝对不是一个好主意。您需要使用 [UIMenuController sharedMenuController] 来呈现触发 readSelect 方法的 UIMenuItem。