![](/img/trans.png)
[英]UIImagePickerController - picking video in background from photo library
[英]Picking a video using UIImagePickerController in SwiftUI
我最近開始在 SwiftUI 上進行開發,現在我在嘗試通過將Data
存儲在函數imagePickerController
中的imageData
中來顯示我從UIImagePicker
挑選的視頻時遇到了困難
這是我的代碼:
struct ImagePicker: UIViewControllerRepresentable {
@Binding var pickedImage: Image
@Binding var imageData: Data
@Binding var isShown: Bool
@Binding var url: URL?
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
@Binding var isShown: Bool
@Binding var url: URL?
// I have tried using a new variable (parentImagePicker) here and I added it to the initializer so that I can store the imageData in it in the function (imagePickerController) below but I wasn't able to implement it correctly
init( isShown: Binding<Bool>, url: Binding<URL?>) {
_isShown = isShown
_url = url
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let mediaType = info[.mediaType] as? String,
mediaType == (kUTTypeMovie as String),
let uiURL = info[.mediaURL] as? URL
else { return }
url = uiURL
isShown = false
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
isShown = false
}
}
func makeCoordinator() -> Coordinator {
return Coordinator( isShown: $isShown, url: $url)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.mediaTypes = [kUTTypeMovie as String]
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController,
context: UIViewControllerRepresentableContext<ImagePicker>) {
}
}
fileprivate func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController.InfoKey: Any]) -> [String: Any] {
return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)})
}
fileprivate func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController.InfoKey) -> String {
return input.rawValue
}
您不應該將視頻中的數據保存在內存中。 實在是太大了! 您已獲得磁盤上視頻文件的 URL。 這就是你所需要的。 URL 可能是臨時的,因此請立即告訴文件管理器將文件復制到某個安全位置,例如 Documents 文件夾。 (復制,而不是移動;您可能沒有移動它的權限。)現在,當您想要播放視頻時,使用 Documents 文件夾中視頻文件的新 URL 即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.