Передача значений UISlider из одного ViewController в другой - PullRequest
0 голосов
/ 02 сентября 2018

Я работаю на 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)
    }
}

Но используются только значения по умолчанию для громкости, высоты тона и темпа, а не те, которые были установлены на слайдере при изменении.

1 Ответ

0 голосов
/ 06 сентября 2018

Я написал код, который делает то же самое с вашим кодом.

В 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)
    }
}

Итак, это мой код, и он хорошо работает.

Это мои гипотезы. Используемые вами значения TTSSettingsViewController могут быть разными значениями, которые вы изменили.

...