ios - 开/关声音(IOS)

标签 ios audio swift3 xcode8 calculator

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

是否可以这样做,当您关闭“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)
    }
}

最佳答案

您可以将声音值存储在 bool(boolean) 值中,并在更改开关后将其保存在UserDefaults中。您应该检索此 bool(boolean) 值,并在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
    }
}

关于ios - 开/关声音(IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523296/

相关文章:

android - Titanium - ti.app.proper 的生命周期

iOS 解析 JSON 和 AFNetworking

audio - 在 J2me 中录制音频时出现异常

wpf - 为什么SoundPlayer间歇性挂起播放?

Swift3.0 fileAttributes 在现有文件上抛出 "no such file"错误

ios - 扩展程序-错误(Swift3)

ios - iOS AVPlayer 无法播放透明视频,怎么办?

android - 我无法从 gitlab 存储库中发布包含两个包的包

javascript - 有没有更好的方法将音频与视频同步(不只是将其放入视频本身)?

ios - 突出显示 uitableViewCell