onTapGesture не переходит в CustomView


#1

Всем привет, помогите советом.
Код работает, выдает лист thumbnails, при нажатии на который переходит в WebView и там можно проиграть видео, нажав на него.

var body: some View {
NavigationView {
List(store.movies ?? Movie) { movie in
NavigationLink (destination: WebView(webViewURL: “https://www.youtube.com/embed/(movie.videoId)”)) {

                VStack {
                    URLImage(url: movie.thumbnail)
                    
                }
                .frame(height: 300)
            }
            .navigationBarTitle(Text("Movies"))
        }
        .onAppear {
            self.store.getAll()
        }
    }
}

}

Это не удобно. Хочу, чтобы WebView открывался по нажатию на thumbnail. Делаю так, но ничего не происходит…

var body: some View {
NavigationView {
List(store.movies ?? Movie) { movie in

                VStack {
                    URLImage(url: movie.thumbnail)
                    .onTapGesture {
                      WebView(webViewURL: "https://www.youtube.com/embed/\(movie.videoId)")
                        print("Tapped \(movie.title)")
                    }
                    
                }
                .frame(height: 300)
                
            }
            .navigationBarTitle(Text("Movies"))
        }
        .onAppear {
            self.store.getAll()
        }
    }
}

В принципе код работает если сразу передавать Webview, но при этом все очень сильно тормозит, долго подгружается…

var body: some View {
    NavigationView {
        List(store.movies ?? [Movie]()) { movie in
             VStack {
                      WebView(webViewURL: "https://www.youtube.com/embed/\(movie.videoId)")
                          }
                .frame(height: 300)
           
            }
            .navigationBarTitle(Text("Movies"))
        }
        .onAppear {
            self.store.getAll()
        }
    }
}

В общем вопросов 2

  1. как сделать, чтобы был функционал как в 3 случае и не тормозило?
  2. Почему не работает 2 случай?
    Благодарю!

#2

Потому что у тапа кложур - это клоужер выполнения: там выполнеятся код (функции и тп), там не строится вью, поэтому в клоужер выполнения бессмыслено помещать вью - они не отобразяться.

В 3м случае, конечно тормозит: вы грузите всё в список - на это надо время.

Неочень понятно, что вас не устраивает.

??? Уточните.


#3

??? Уточните.

Смотрите, получается нажимаешь на картинку, экран меняется на WebView, там надо еще раз нажимать, чтобы началось воспроизведение.
Хочется нажать и сразу воспроизведение…


#4

Ну WebView всего лишь отображает страничку из инета. Если от ютуба вам надо только видео, то вам надо загрузить видео во внутренний плеер AVPlayer (вот и вот в помощь) и тогда можно управлять воспроизведением.

Вот еще на всякий случай API ютуба, если вам ещё какие данные нужны.