在 SwiftUI 中使用 UIImagePickerController 选择视频

Picking a video using UIImagePickerController in SwiftUI

我最近开始在 SwiftUI 上进行开发,现在我在尝试通过将 Data 存储在 imageData 中来显示我从 UIImagePicker 中挑选的视频时遇到困难函数 imagePickerController

这是我的代码:

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视频文件就可以了。