簡體   English   中英

在 SwiftUI 中使用 UIImagePickerController 選擇視頻

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM