iOS SwiftUI 视频自动播放

8

我正在开发一款iOS应用程序,在一个视图中有一组按钮,当其中一个按钮被点击时,应用程序会导航到一个新的视频视图,并且应该自动播放视频。目前视频没有自动播放,但在点击时会播放,我的理解是使用下面的代码应该可以实现自动播放。欢迎任何帮助(这是我第一次构建iOS应用程序)。

let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "videoToPlay", ofType: "mp4")!))

VideoPlayer(player: player)
  .edgesIgnoreSafeArea(.all)
  .onAppear() {
    player.play()
}

所以当它是主视图时似乎可以工作,但我正在使用一个带有按钮的主屏幕来导航到新视图,而且似乎转场会导致视频自动播放出现问题。有什么建议吗? - devlo
相同和全屏显示表格、自动旋转是问题。 - foolbear
3个回答

8

当我在Sheet中自动播放时也遇到了同样的问题。 我通过在onAppear中加载视频项目并在视图出现后播放它来解决了这个问题,像这样:

var player = AVPlayer()

VideoPlayer(player: player)
    .onAppear{
      if player.currentItem == nil {
            let item = AVPlayerItem(url: URL(string: url)!)
            player.replaceCurrentItem(with: item)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
            player.play()
        })
    }

1

你说得对,以下代码确实可以工作,但可能不会按照你的预期行事,因为在SwiftUI中.onAppear的工作方式。除非你的视频在某种形式的lazy视图中,并且在滚动之前处于屏幕外,否则.onAppear将在视图的初始渲染时运行。

你没有说明你的用例,但我建议你可以使用定时器或其他一些UIKit适配来实现某些东西。祝你好运!


0

我是用以下设置完成的。

我有一个带有LazyVStack的列表

ScrollView{
    LazyVStack {
        ForEach(posts, id: \.id) { post in
            buildPostCell(post)
        }
    }
}

在单元格内。 vm.player 是一个懒惰的AVPlayer变量,由视图模型每个单元格实现。

VideoPlayer(player: vm.player)
    .frame(height: 300)
    .onAppear {
        vm.player?.play()
    }.onDisappear {
        vm.player?.pause()
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接