无法将按钮绑定到 AVPlayer
Posted
技术标签:
【中文标题】无法将按钮绑定到 AVPlayer【英文标题】:Can't bind button to AVPlayer 【发布时间】:2020-06-18 12:45:49 【问题描述】:我正在尝试快速制作详细视图,但我无法找到使用自定义按钮暂停视频的方法。而且当我回到我的列表时,我仍然可以听到在后台播放的视频。这是我的 AVPlayer 和按钮代码。
import SwiftUI
import AVKit
struct Workdetail: View
var work: WorkoutDe
@State var player = AVPlayer()
@State var isplaying = true
var body: some View
VStack
ZStack
VideoPlayer(player: $player, work: work)
.frame(height: UIScreen.main.bounds.height / 3.5)
Butto(player: $player, isplaying: $isplaying)
Spacer()
struct Butto : View
@Binding var player : AVPlayer
@Binding var isplaying : Bool
var body : some View
Button(action:
if self.isplaying
self.player.pause()
self.isplaying = false
else
self.player.play()
self.isplaying = true
)
Image(systemName: self.isplaying ? "pause.fill" : "play.fill")
.font(.title)
.foregroundColor(.white)
.padding(20)
struct VideoPlayer : UIViewControllerRepresentable
var work : WorkoutDe
@Binding var player : AVPlayer
var playerLayer = AVPlayerLayer()
public func makeUIViewController(context: Context) -> AVPlayerViewController
let player = AVPlayer(url: URL(fileURLWithPath: String(work.url)))
let controller = AVPlayerViewController()
controller.player = player
controller.videoGravity = .resizeAspectFill
player.actionAtItemEnd = .none
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: .main) _ in
player.seek(to: CMTime.zero)
player.play()
player.play()
return controller
func rewindVideo(notification: Notification)
playerLayer.player?.seek(to: .zero)
public func updateUIViewController(_ uiViewController: AVPlayerViewController, context: UIViewControllerRepresentableContext<VideoPlayer>)
AVPlayer
可以工作,但是当我按下按钮时没有任何反应。按钮的图像发生变化,但视频不会停止播放。
有人可以向我解释一下如何绑定按钮,因为我无法弄清楚
【问题讨论】:
看来你们有两个不同的球员?我看到@State var player
两次。一是在玩;另一个是按钮的目标。
@matt 我将它们都替换为“@Binding”,现在我在主体视图中有一个“@State var player”。但我仍然无法暂停视频。无论如何感谢您的帮助。
我不知道你的代码现在是什么样子的。
@matt 我编辑了这篇文章,现在它包含了缺失的部分。你能帮我把按钮绑定到 AVPlayer 吗?
【参考方案1】:
这里是问题的代码,如果你们正在寻找它。有人在另一个帖子中回答了它:
public func makeUIViewController(context: Context) -> AVPlayerViewController
let player = AVPlayer(url: URL(fileURLWithPath: String(work.url)))
let controller = AVPlayerViewController()
DispatchQueue.main.async
self.player = player
【讨论】:
以上是关于无法将按钮绑定到 AVPlayer的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone - 将 TextBox 或其他控件绑定到按钮的 CommandParameter