【发布时间】:2020-06-07 17:59:39
【问题描述】:
我创建了一个切换按钮来关闭/打开音乐。这个问题是我必须关闭应用程序才能生效。
这是我用来开始音乐的:
.onAppear(perform: {self.musicM.playSoundBand(sound: "Band", type: "wav")})
这是我的切换按钮:
Toggle(isOn: self.$musicM.mOn) {
ZStack {
Image("Button")
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fit)
.rotationEffect(Angle(degrees: 180))
.padding([.leading, .trailing], 40);
Text("Music")
.padding(.all, 20)
.padding([.leading, .trailing], 40)
.font(.largeTitle)
.foregroundColor(.black)
}
Spacer()
}.onTapGesture(perform: {if self.musicM.mOn == false { self.musicM.pauseMusicBand(); self.soundEffectsM.playSound(sound: "GunCock", type: "wav")}})
我已经尝试过变体并使用 .stop() 但仍然无法正常工作。如果这有帮助的话,我的 soundmanager 类也是:
class musicModel: ObservableObject {
var audioPlayerBand:AVAudioPlayer?
@Published var mOn: Bool = UserDefaults.standard.bool(forKey: "mOn") {
didSet {
UserDefaults.standard.set(self.mOn, forKey: "mOn")
}
}
func pauseMusicBand() {
UserDefaults.standard.set(false, forKey: "mOn"); audioPlayerBand?.pause()
}
func setVolume(volume: Float) {
audioPlayerBand?.volume = volume
}
func playSoundBand(sound: String, type: String) {
if let path = Bundle.main.path(forResource: sound, ofType: type) {
do {
audioPlayerBand = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
audioPlayerBand?.numberOfLoops = -1
audioPlayerBand?.play()
} catch {
print("ERROR: Could not find sound file!")
}; if self.mOn == false { pauseMusicBand() }
}
}
}
【问题讨论】:
-
看不懂是什么问题; “这个问题是我必须关闭应用程序才能生效。”和“我已经尝试过变体并使用 .stop() 但仍然无法正常工作。”请以不同的方式解释问题。
-
好的,我会尽量讲清楚。在我的应用程序中,我播放了背景音乐。我创建了一个切换按钮,允许用户根据需要将音乐静音。问题是它不会立即静音,音乐会继续播放,直到我关闭应用程序,当我再次打开它时,音乐将被静音。我希望我能以更好的方式解释它。
标签: swift swiftui avaudioplayer audio-player togglebutton