При переходе к подвиду я настроил его так, чтобы видео воспроизводилось автоматически. Внизу видео есть группа ссылок, которые ведут к соответствующему контенту. При нажатии на один из них в стек помещается новый вид, и начинается воспроизведение другого видео.
Проблема возникает при использовании автоматически сгенерированной кнопки «‹ Назад», чтобы вернуться к предыдущему просмотру (в котором было другое видео). Этим исходным видом можно управлять с помощью элементов управления проигрывателя, но на экране ничего не отображается.
Я попытался обновить кадр CGRect, использовать onAppear для повторной инициализации видеоплеера, а также последовал совету здесь.
Пока ничего не работает. Вот код, который я использую для реального видеоплеера (адаптировано с веб-сайта Криса Маша):
import SwiftUI
import AVKit
import UIKit
import AVFoundation
let playerLayer = AVPlayerLayer()
class PlayVideo: UIView {
init(frame: CGRect, url: URL) {
super.init(frame: frame)
// Create the video player using the URL passed in.
let player = AVPlayer(url: url)
player.volume = 100 // Will play audio if you don't set to zero
player.play() // Set to play once created
// Add the player to our Player Layer
playerLayer.player = player
playerLayer.videoGravity = .resizeAspectFill // Resizes content to fill whole video layer.
playerLayer.backgroundColor = UIColor.black.cgColor
layer.addSublayer(playerLayer)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
static func pauseVideo() {
playerLayer.player?.pause()
}
}
struct ViewVideo: UIViewRepresentable {
var videoURL:URL
var previewLength:Double?
func makeUIView(context: Context) -> UIView {
return PlayVideo(frame: .zero, url: videoURL)
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
Это вызывается из основного представления с использованием: ViewVideo(videoURL: videoURL)
Единственная работа, которую я могу придумать, - это отключить кнопку «Назад» и заставить пользователя каждый раз возвращаться к основному виду. Это ужасный вариант, и я надеюсь, что кто-то даст здесь полезный совет. Спасибо -