我将此代码用于按下按钮时的按下声音。
是否可以这样做,当您关闭“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/