#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)
}
}
Приведенный выше код может быть выполнен нажатием на кнопку или любыми другими действиями.