Изменить воспроизведение видео в VideoPlayerView из SwiftUI View - PullRequest
0 голосов
/ 10 апреля 2020

Обзор я преобразовываю старое приложение 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
...