如何从已经关闭的视图中杀死背景音频

问题描述 投票:0回答:1

我的应用程序的主要视图是歌曲列表。

import SwiftUI

struct ContentView: View {
        var body: some View {
        NavigationView {
            List (fileURLs, id: \.path) { song in
                NavigationLink(destination: PlayView(songURL: song)) {
                    SongRow(songURL: song)
                }
            }
            .padding()
            .navigationBarTitle(Text("Songs"))
                .navigationBarItems(trailing: addButton)
        }

    }

}

您点击一首歌曲,它会导航到PlayView,该实例会实例化音频播放器:

import SwiftUI
import AVKit

struct PlayView: View {

    var songURL: URL

    @State var player : AVAudioPlayer!

    var body: some View {
        VStack {
            Button(action: {
                self.playPause()
            }) {
                Text("Play/Pause")
            }
        }.onAppear {
            self.player = try! AVAudioPlayer(contentsOf: self.songURL)
            self.playPause()
        }
    }

    func playPause() {
        if self.player.isPlaying {
            self.player.pause()
        } else {
            self.player.play()
        }
    }
}

问题是,当我导航到另一首歌曲的PlayView时,它会在第一首歌曲顶部播放音频(即,两者同时播放)。当第二首歌播放时,我应该如何杀死第一首歌?

swift swiftui avaudioplayer
1个回答
1
投票

在我的项目中,我在应用程序中到处都只使用一个final class实例。我认为您遇到的问题是,您正在子视图(AVPlayer)中创建许多PlayView实例,但只能控制其中一个。这是我的解决方案的示例:

© www.soinside.com 2019 - 2024. All rights reserved.