在我的新 SwiftUI 项目中,我有一个用于从 url 流式传输音乐的 AVPlayer。现在我需要通过滑块控制播放曲目的当前时间和音量,这是设计的一部分:
现在我可以使用 UserData 最终类及其 @Published 变量来控制播放器,例如isPlaying:
final class UserData: ObservableObject {
// ...
@Published var player: AVPlayer? = nil
@Published var isPlaying: Bool = false
//...
func playPausePlayer(withSong song: Song, forPlaylist playlist: [Song]?) {
//...
if isPlaying {
player?.pause()
} else {
player?.play()
}
isPlaying.toggle()
}
}
Run Code Online (Sandbox Code Playgroud)
很高兴知道这部分是否有更好的决定
问题是属性currentTime,duration我只能从playeror 中获取player?.currentItem,所以我不能像这样制作滑块:
@EnvironmentObject var userData: UserData
// ...
Slider(value: userData.player?.currentItem?.currentTime()!, in: 0...userData.player?.currentItem?.duration as! Double, step: 1)
Run Code Online (Sandbox Code Playgroud)
我怎样才能控制这些事情?