在 SwiftUI 中实现 UIView
Implementing UIView in SwiftUI
我正在尝试按照本教程通过 UIView 在 SwiftUI 中实现视频播放器:https://medium.com/flawless-app-stories/avplayer-swiftui-b87af6d0553
很遗憾,视频没有显示,我导入了 AVFoundation,所以我不确定这个问题。有人找到解决办法了吗?
这是我创建的类:
class PlayerUIView: UIView {
private let playerLayer = AVPlayerLayer()
init(frame: CGRect, urlString: String) {
super.init(frame: frame)
guard let url = URL(string: urlString) else {
return
}
let player = AVPlayer(url: url)
player.play()
playerLayer.player = player
layer.addSublayer(playerLayer)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
}
struct VideoPlayerUIView: UIViewRepresentable {
var frame: CGRect
var urlString: String
func makeUIView(context: Context) -> some UIView {
return PlayerUIView(frame: self.frame, urlString: self.urlString)
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}
这里我是如何在 SwiftUI 中使用实现的:
var body: some View {
Text("Videos")
VideoPlayerUIView(frame: CGRect(x: 0, y: 0, width: 400, height: 300), urlString: urlString)
}
这是输出(无视频)
enter image description here
你在这里所做的一切。
唯一导致错误的是您如何处理 URL。
尝试像这样初始化播放器
let player = AVPlayer(url: Bundle.main.url(forResource: urlString, withExtension: "mp4")!)
根据您使用的格式更改扩展名。请记住,这里我强制包装可选的。因此,如果您输入错误的 urlString 或使用 mp4 以外的视频扩展名,应用程序将崩溃
我正在尝试按照本教程通过 UIView 在 SwiftUI 中实现视频播放器:https://medium.com/flawless-app-stories/avplayer-swiftui-b87af6d0553
很遗憾,视频没有显示,我导入了 AVFoundation,所以我不确定这个问题。有人找到解决办法了吗?
这是我创建的类:
class PlayerUIView: UIView {
private let playerLayer = AVPlayerLayer()
init(frame: CGRect, urlString: String) {
super.init(frame: frame)
guard let url = URL(string: urlString) else {
return
}
let player = AVPlayer(url: url)
player.play()
playerLayer.player = player
layer.addSublayer(playerLayer)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
}
struct VideoPlayerUIView: UIViewRepresentable {
var frame: CGRect
var urlString: String
func makeUIView(context: Context) -> some UIView {
return PlayerUIView(frame: self.frame, urlString: self.urlString)
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}
这里我是如何在 SwiftUI 中使用实现的:
var body: some View {
Text("Videos")
VideoPlayerUIView(frame: CGRect(x: 0, y: 0, width: 400, height: 300), urlString: urlString)
}
这是输出(无视频) enter image description here
你在这里所做的一切。
唯一导致错误的是您如何处理 URL。
尝试像这样初始化播放器
let player = AVPlayer(url: Bundle.main.url(forResource: urlString, withExtension: "mp4")!)
根据您使用的格式更改扩展名。请记住,这里我强制包装可选的。因此,如果您输入错误的 urlString 或使用 mp4 以外的视频扩展名,应用程序将崩溃