打开/关闭声音 (IOS)

On / off sound (IOS)

我将此代码用于按下时发出按下声音的按钮。

是否可以这样做,当您关闭 "Switch" -(在第二个 VC 上)时,第一个 VC 上的按钮的声音会打开关闭?

 @IBAction func SoundButton(_ sender: UIButton) {
    let filename = "button-16"
    let ext = "mp3"

    if let soundUrl = Bundle.main.url(forResource: filename, withExtension: ext) {
        var soundId: SystemSoundID = 0

        AudioServicesCreateSystemSoundID(soundUrl as CFURL, &soundId)

        AudioServicesAddSystemSoundCompletion(soundId, nil, nil, { (soundId, clientData) -> Void in
            AudioServicesDisposeSystemSoundID(soundId)
        }, nil)

        AudioServicesPlaySystemSound(soundId)
    }
}

您可以将声音值存储在布尔值中,并在开关更改后将其保存在 UserDefaults 中。您应该检索此布尔值并在 cellForRowAt.

中相应地设置开关的状态

GlobalVariables.swift

var isSoundOn: String {
    get {
        return UserDefaults.standard.bool(forKey: "isSoundOn")
    }

    set {
        UserDefaults.standard.setBool(newValue, forKey: "isSoundOn")
        UserDefaults.standard.synchronize()
    }
}

CalculatorViewController.swift

@IBAction func soundButtonPressed(_ sender: UIButton) {
    guard isSoundOn else {
        return
    }

    let filename = "button-16"
    let ext = "mp3"

    [...]
}

SettingsViewController.swift

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let settingCell = tableView.dequeueReusableCell(withIdentifier: "settingCell", for: indexPath) as! SettingCell
    settingCell.switch.isOn = isSoundOn

    return settingCell
}

SettingCell.swift

class SettingCell: UITableViewCell {
    @IBOutlet weak var switch: UISwitch!

    @IBAction func switchValueChanged() {
        isSoundOn = switch.isOn
    }
}