Обзор я преобразовываю старое приложение iOs в SwiftUI im новое iOS Dev, приложение - это игра на языке жестов для детей, у меня есть массив знаков с названием знаков, так что Идея, чтобы изменить видео с помощью кнопки, я следую этому руководству, чтобы сделать видео плеер: SwiftUI Lopping видео
Проблема
так что теперь у меня возникли проблемы с изменением видео, которое я намеревался сделать @Binding
var, чтобы изменить видео в playerUIView: UIView
, но я не могу / не знаю, как сделать var init в init переопределения.
Это playerUIView
класс:
class playerUIView: UIView{
private var playerLayer = AVPlayerLayer()
private var playerLooper : AVPlayerLooper?
init (frame: CGRect, URL: URL){
super.init(frame: frame)
let fileURL = URL
let playerItem = AVPlayerItem(url: fileURL)
//configurar el video
let player = AVQueuePlayer(playerItem: playerItem)
playerLayer.player = player
playerLayer.videoGravity = .resizeAspectFill
layer.addSublayer(playerLayer)
//loop
playerLooper = AVPlayerLooper(player: player, templateItem: playerItem)
/*
player.actionAtItemEnd = .none
NotificationCenter.default.addObserver(self, selector: #selector(rewindVideo(notification:)), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
*/
//reproducir el video
player.play()
}
@objc
func rewindVideo(notification: Notification) {
playerLayer.player?.seek(to: .zero)
}
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
, а это VideoPlayerView
struct
struct VideoPlayerView: UIViewRepresentable {
var videoName : String
func makeUIView(context: Context) -> UIView {
print(videoName)
let url = Bundle.main.url(forResource: self.videoName, withExtension: ".mp4")!
let player = playerUIView(frame: .zero, URL: url)
return player
}
func updateUIView(_ uiView: UIView, context: Context) {
//nada aqui
}
}
Так что я хочу изменить воспроизведение видео с помощью кнопки, я меняю значение, но видео на экране не меняется
VStack{
VideoPlayerView(videoName: self.videoSing)
HStack{
Button(action: {
self.videoSing = "fam_1"
}){
Text("Familia 1")
}
Button(action: {
self.videoSing = "fam_2"
}){
Text("Familia 2")
}
Button(action: {
self.videoSing = "fam_3"
}){
Text("Familia 3")
}
}
}
Квест
- Лучший способ изменить текущую игру видео?
Примечания
- если вам нужна дополнительная информация, я не могу добавить код
- im новый в SwitUI и в Свифт Динт так много знают о многом о UIKIT