将 UISlider 值从一个 ViewController 传递到另一个
Passing UISlider values from one ViewController to another
我正在研究 AVSpeechSynthesizer,我正在尝试将滑块上设置的音量、音高和速率值从设置视图控制器传递到主视图控制器。
在设置视图控制器中,从默认值开始,
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)
}
}
但只使用了音量、音调和速率的默认值,而不是通过更改在滑块上设置的值。
我写了一些代码与你的代码做同样的事情。
在SettingViewController中
class SettingViewController: UIViewController {
var volume: Float = 0.0
@IBAction func slider(_ sender: UISlider) {
volume = sender.value
}
@IBAction func closeButton(_ sender: Any) {
dismiss(animated: true)
}
}
和ViewController.swift
class ViewController: UIViewController {
var settingVC: SettingViewController!
override func viewDidLoad() {
super.viewDidLoad()
settingVC = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController
}
@IBAction func printSettingValue(_ sender: Any) {
// Use setting view controller's value
print(settingVC.volume)
}
@IBAction func showSettingView(_ sender: Any) {
show(settingVC, sender: nil)
}
}
所以,这是我的代码,效果很好。
我的 hypotheses.TTSSettingsViewController 中您使用的值可能与您更改过的值不同。
我正在研究 AVSpeechSynthesizer,我正在尝试将滑块上设置的音量、音高和速率值从设置视图控制器传递到主视图控制器。 在设置视图控制器中,从默认值开始,
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)
}
}
但只使用了音量、音调和速率的默认值,而不是通过更改在滑块上设置的值。
我写了一些代码与你的代码做同样的事情。
在SettingViewController中
class SettingViewController: UIViewController {
var volume: Float = 0.0
@IBAction func slider(_ sender: UISlider) {
volume = sender.value
}
@IBAction func closeButton(_ sender: Any) {
dismiss(animated: true)
}
}
和ViewController.swift
class ViewController: UIViewController {
var settingVC: SettingViewController!
override func viewDidLoad() {
super.viewDidLoad()
settingVC = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController
}
@IBAction func printSettingValue(_ sender: Any) {
// Use setting view controller's value
print(settingVC.volume)
}
@IBAction func showSettingView(_ sender: Any) {
show(settingVC, sender: nil)
}
}
所以,这是我的代码,效果很好。
我的 hypotheses.TTSSettingsViewController 中您使用的值可能与您更改过的值不同。