【发布时间】:2018-03-15 09:15:11
【问题描述】:
如何自动逐个单元格滚动 UITableView。
嗯,我觉得很容易实现,而且我做到了如此接近
这是我在下面 ViewController 中的 SPEECH 函数
var myUtterance = AVSpeechUtterance(string: "")
let speecher = AVSpeechSynthesizer()
func speechWord(word: String){
DispatchQueue.main.async {
self.speecher.stopSpeaking(at: AVSpeechBoundary.immediate)
self.myUtterance = AVSpeechUtterance(string: word)
self.myUtterance.voice = AVSpeechSynthesisVoice(language: "en-US")
self.myUtterance.rate = 0.5
self.speecher.speak(self.myUtterance)
}
}
这是我在下面 ViewController 中的 AutoSpeech 功能
func startAutoSpeechList(row: Int){
let indexPath = IndexPath(row: row, section: 0)
print(indexPath)
myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .top) //Select
myTableView.scrollToNearestSelectedRow(at: .top, animated: true) //Scroll
let cell = tableView(myTableView, cellForRowAt: indexPath) as! WordTableViewCell
self.speechWord(word: cell.spell.text!) //Speech
}
(方法一) 这是我用来激活自动语音功能的按钮
var row = 0
@IBAction func myAutoButton(_ sender: UIBarButtonItem) {
self.startAutoSpeechList(row: row)
row += 1
}
方法一,看我上传的图片 当我第一次点击AutoButton时,它跳转到屏幕A。我再次点击AutoSpeech按钮,它到屏幕B。然后我点击AutoButton第三次跳转到C屏。
(方法二) 这是我用来激活自动语音功能的按钮
@IBAction func myAutoButton(_ sender: UIBarButtonItem) {
for myRow in 0..<3{
self.startAutoSpeechList(row: myRow)
}
}
方法2,当我点击自动语音按钮时,它立即跳转到屏幕C,而不会停留屏幕A,B。你能解释一下为什么它会立即逃离 Scree A、B 吗?
是否有方法3可以帮助我实现这一点当我点击 AutoSpeech 按钮,它将跳转到屏幕 A 并发音该单词 "cat",读完后跳到B “狗”,然后跳转到 C,等等……。谁能帮我实现方法3? Swift 4 对我来说会更好。
【问题讨论】:
-
方法 2 看起来完全符合您的要求,只需几毫秒即可完成。您要么需要一个计时器来控制行之间的时间,要么您需要知道每个人何时完成演讲,以便您可以进入下一个
-
方法2的问题是直接跳转到C屏,没有停留在A、B屏,请问如何解决
-
我知道,这就是我在评论中所说的?修复也建议在上面的评论中
-
有什么方法可以观察是否播放完语音?
标签: ios swift uitableview uiscrollview