【发布时间】:2018-09-02 13:36:03
【问题描述】:
我正在研究 AVSpeechSynthesizer,我正在尝试将滑块上设置的音量、音高和速率值从设置视图控制器传递到主视图控制器。 在设置 View Controller 中,从默认值开始,
var volume : Float = 1.0
var pitch: Float = 1.0
var rate: Float = AVSpeechUtteranceDefaultSpeechRate
还有滑块动作,
@IBAction func volumeSliderDidSlide(_ sender: UISlider) {
volume = sender.value
testLable.text = String(volume)
}
@IBAction func pitchSliderDidSlide(_ sender: UISlider) {
pitch = sender.value
}
@IBAction func rateSliderDidSlide(_ sender: UISlider) {
rate = sender.value
}
在主视图控制器中,
var ttsSettingsViewController: TTSSettingsViewController!
@IBOutlet weak var textBox: UITextView!
var speechSynthesizer = AVSpeechSynthesizer()
var speechUtterence : AVSpeechUtterance = AVSpeechUtterance(string: "")
override func viewDidLoad() {
super.viewDidLoad()
let storyBoard: UIStoryboard = UIStoryboard(name: "TTS", bundle: nil)
ttsSettingsViewController = storyBoard.instantiateViewController(withIdentifier: "TTSSettingsViewController") as! TTSSettingsViewController
}
@IBAction func didTapSpeech(_ sender: Any) {
if let textBoxText = textBox.text{
speechUtterence = AVSpeechUtterance(string: textBoxText)
speechUtterence.volume = ttsSettingsViewController.volume
speechUtterence.pitchMultiplier = ttsSettingsViewController.pitch
speechUtterence.rate = ttsSettingsViewController.rate
speechSynthesizer.speak(speechUtterence)
}
}
但仅使用音量、音高和速率的默认值,而不是通过更改在滑块上设置的值。
【问题讨论】:
-
这是一个非常常见的错误。
TTSSettingsViewController()创建了一个全新的实例,它不是故事板中的实例,因此出口没有连接。 -
@vadian 感谢您的更正,删除了该行,这就是我实例化的方式: let storyBoard: UIStoryboard = UIStoryboard(name: "TTS", bundle: nil) ttsSettingsViewController = storyBoard.instantiateViewController(withIdentifier :“TTSSettingsViewController”)为! TTSSettingsViewController 但我仍然得到默认值。
-
你如何展示你的 settingsController?您的代码实例化了一个控制器,但没有对它做任何事情,因此默认值...