Как перейти на полный экран с помощью видеоплеера() в SwiftUI?

#swift #swiftui

Вопрос:

Я использую следующий код в своем проекте, и он отлично работает.

Но мне нужно знать, возможно ли воспроизвести видео в полноэкранном режиме, когда пользователь нажимает на кнопку или любое другое действие.

Это мой код:

    VideoPlayer(player: AVPlayer(url:  URL(string: "https://xxx.mp4")!)) {
        VStack {
            Text("Watermark")
                .foregroundColor(.black)
                .background(Color.white.opacity(0.7))
            Spacer()
        }
        .frame(width: 400, height: 300)
    }
    .frame(width: UIScreen.main.bounds.width, height: 300)
 

Итак, по сути, идея состоит в том, чтобы сделать видеоплеер полноэкранным, похожим на видеоплеер YouTube.

Возможно ли это с помощью VideoPlayer() in swiftUI ?

Комментарии:

1. Есть ли зеленая кнопка в левом верхнем углу окна?

2. @apodidae, нет, в левом верхнем углу нет никаких кнопок. только 1 кнопка в правом верхнем углу для отключения/включения видео.

Ответ №1:

Они должны включать опцию или иметь эту кнопку по умолчанию в VideoPlayer Я не знаю, почему apple сделала это, если кто-то знает, добавьте комментарий о том же, в любом случае

Однако есть более простой метод

 struct CustomVideoPlayer: UIViewControllerRepresentable {
  
  func makeUIViewController(context: Context) -> AVPlayerViewController {
    let controller = AVPlayerViewController()
    let url: String = "https://xxx.mp4"
    let player1 = AVPlayer(url: URL(string: url)!)
    
    controller.player = player1
    return controller
  }
  
  func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {
    
  }
}
 

Попробуйте этот код, позвоните CustomVideoPlayer() и назовите его frame с любой высоты, и у вас будет полноэкранный режим в левом верхнем углу, как на YouTube

РЕДАКТИРОВАТЬ: Я попробовал принятое решение, но не думаю, что оно будет полноэкранным

Ответ №2:

Вот как мне это удалось сделать. Я надеюсь, что это поможет кому — то еще в будущем.

Это грубая идея, но она работает так, как и предполагалось.

В принципе, я поместил видеоплеер в VStack и задал ему полную ширину и высоту.

Я задал VStack заданную высоту и полную ширину.

Я дал VStack TapGesture и изменил его ширину и высоту при двойном нажатии, и таким образом все его содержимое (видеоплеер) будет соответственно изменено.

Это и есть код:

 struct vidPlayerView: View {
    
    @State var animate = false
    
    var body: some View {
        
        VStack{
  
            VideoPlayer(player: AVPlayer(url:  URL(string: "https://xxxx.mp4")!)) {
                VStack {
                    Image(systemName: "info.circle")
                        .font(.system(size: 18, weight: .bold))
                        .foregroundColor(.white)
                    Spacer()
                }
                .frame(width: 400, height: 300, alignment: .topLeading)
            }
          
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
            
            Spacer()
            
        }.onTapGesture(count: 2) {
            withAnimation {
                                self.animate.toggle()
                            }
        }
        .frame(maxWidth: self.animate ? .infinity : UIScreen.main.bounds.width, maxHeight: self.animate ? .infinity : 300, alignment: .topLeading)
        
        

        
    }
}
 

Приведенный выше код может быть выполнен нажатием на кнопку или любыми другими действиями.