,可以通过以下步骤实现:
import SwiftUI
import UIKit
import AVKit
struct VideoPicker: UIViewControllerRepresentable {
@Binding var videoURL: URL?
@Environment(\.presentationMode) private var presentationMode
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.mediaTypes = [kUTTypeMovie as String]
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {
}
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
let parent: VideoPicker
init(_ parent: VideoPicker) {
self.parent = parent
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoURL = info[.mediaURL] as? URL {
parent.videoURL = videoURL
}
parent.presentationMode.wrappedValue.dismiss()
}
}
}
struct ContentView: View {
@State private var videoURL: URL?
@State private var showVideoPicker = false
var body: some View {
VStack {
if let videoURL = videoURL {
VideoPlayer(player: AVPlayer(url: videoURL))
.frame(height: 300)
} else {
Text("No video selected")
}
Button("Select Video") {
showVideoPicker = true
}
}
.sheet(isPresented: $showVideoPicker) {
VideoPicker(videoURL: $videoURL)
}
}
}
在上述代码中,我们创建了一个VideoPicker结构体,它遵循UIViewControllerRepresentable协议,用于在SwiftUI中封装UIImagePickerController的功能。在Coordinator类中,我们实现了UIImagePickerControllerDelegate的代理方法,当用户选择视频后,会将视频的URL赋值给videoURL,并关闭视频选择器。在ContentView中,我们使用VideoPicker结构体作为一个sheet来显示视频选择器,并将选择的视频URL存储在videoURL中。最后,根据videoURL的值,我们可以在视图中显示选中的视频或显示一个文本。
推荐的腾讯云相关产品:腾讯云视频处理服务(云点播),该服务提供了丰富的视频处理功能,包括视频转码、视频剪辑、视频拼接等,适用于各种视频处理场景。产品介绍链接地址:https://cloud.tencent.com/product/vod
新知
大匠光临
云+社区技术沙龙[第23期]
北极星训练营
云+社区技术沙龙[第6期]
高校公开课
北极星训练营
企业创新在线学堂
云+社区技术沙龙[第14期]
云+社区技术沙龙[第15期]
领取专属 10元无门槛券
手把手带您无忧上云