swift - 委托方法:AVSpeechSynthesizerDelegate 的“willSpeakRangeOfSpeechString”未被调用
问题描述
在我的应用程序中,我希望 Siri 读出文本。这工作正常。但我也想使用AVSpeechSynthesizerDelegate
. 这两种方法被正确调用,但willSpeakRangeOfSpeechString
不是:
speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance)
speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance)
这就是我生成AVSpeechSynthesizer
. 这是在didSelectItemAt
我的UICollectionViewController
:
let utterance = AVSpeechUtterance(string: "testString")
utterance.rate = 0.5
utterance.volume = 1
utterance.preUtteranceDelay = 0.0
utterance.postUtteranceDelay = 0.0
self.synthesizer.speak(utterance)
AVSpeechSynthesizer
声明在类的顶部,委托设置在viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
self.synthesizer.delegate = self
}
为什么调用此委托方法?
编辑:
当然我已经实现AVSpeechSynthesizerDelegate
并导入了 AVFoundation。
解决方案
我刚刚遇到这个或类似的问题。我在调用它的 speak 函数后设置了 AVSpeechSynthesizer 委托。这导致 willSpeakRangeOfSpeechString 不被调用。在调用 speak 函数之前分配委托修复了这个问题。
推荐阅读
- python - BeautifulSoup - 从开始关键字刮到结束关键字的文本
- asp.net-core - 如何从非默认版本文档中排除默认 API 路由版本
- sql - 如何检查oracle sql中是否存在外键约束
- python - 使用 selenium python 上传文件
- r - R:For循环仅在手动执行时有效
- java - 反向链表的递归程序
- django - 我在 Elastic Beanstalk for AL2 中的环境变量在哪里?
- php - 计算 WooCommerce 中所有订单商品的完整数量
- javascript - 为什么我的机器人总是崩溃(无法读取未定义的属性“发送”)
- twilio - Twilio Call 在响铃后断开