0

我在我的应用程序中制作了一项功能,可让您将音乐静音,我在此处放置了一个开关,以便您可以在打开和关闭之间进行切换。但是,该开关在应用程序中工作正常,当我关闭 vie 控制器并将其拉回时,它仍会显示它是如何离开的,但是当您关闭应用程序并重新打开它时,开关看起来好像它关闭了但它仍然播放音乐。这是我的代码,我会附上一张图片。

import Foundation
import UIKit
import SpriteKit
import AVFoundation




var bombSoundEffect: AVAudioPlayer!
var Ghost = SKSpriteNode()

class SecondViewController: UIViewController {

var sw = false




@IBOutlet var mySwitch: UISwitch!

@IBAction func switchpressed(_ sender: AnyObject) {

let defaults = UserDefaults.standard

    if mySwitch.isOn{
                defaults.set(true, forKey: "SwitchState")

        if bombSoundEffect != nil {
            bombSoundEffect.stop()
            bombSoundEffect = nil

        }

    }
    else{
        defaults.set(false, forKey: "SwitchState")

        let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)!
        let url = URL(fileURLWithPath: path)


        do {
            let sound = try AVAudioPlayer(contentsOf: url)
            bombSoundEffect = sound
            sound.numberOfLoops = -1
            sound.play()
        } catch {
            // couldn't load file :(
        }

    }


}


override func viewDidLoad() {
    super.viewDidLoad()

    super.viewDidLoad()

    let defaults = UserDefaults.standard

    if (defaults.object(forKey: "SwitchState") != nil) {
        mySwitch.isOn = defaults.bool(forKey: "SwitchState")


    }
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}


}

这是图片 在此处输入图像描述 如果你不明白我上面所说的,请提问。

4

2 回答 2

1

正如我从您的代码中了解到的那样,您没有正确检查用户默认值。在您的viewDidLoad中,您必须检查用户默认值的 bool 值是否设置为 true。

override func viewDidLoad() {
    super.viewDidLoad()
    let defaults = UserDefaults.standard

    //check bool Value is set to true or not

    if defaults.bool(forKey: "SwitchState") == true {
        mySwitch.isOn = defaults.bool(forKey: "SwitchState")

    } else {
       print("false")

    }
}

请检查此代码。希望它会帮助你。

于 2016-10-02T04:32:06.083 回答
0

viewDidLoad需要检查何时需要暂停音乐:

// Keep this part the same
let defaults = UserDefaults.standard

if (defaults.object(forKey: "SwitchState") != nil) {
    mySwitch.isOn = defaults.bool(forKey: "SwitchState")
}

// Check to see if the switch is off, if so, stop the music
if !mySwitch.isOn {
    bombSoundEffect.stop()
    bombSoundEffect = nil
}

您还可以取出重复调用super.viewDidLoad.

注意:看起来您的视图控制器中确实有更多代码,因为目前没有任何可以播放音乐的东西,因此如果您没有提供足够的信息,此解决方案可能无法正常工作。

于 2016-10-03T18:16:57.107 回答