将Uikit ImagePicker转换为Swiftui

发布于 2025-01-21 12:52:31 字数 2374 浏览 3 评论 0原文

我发现很难转换它,以便在Swiftui视图中起作用。我尝试了自己的变体,但是功能“ getVideofromcamerarololl”具有“ on” on oon on on'on's oon'''''''''''on on oon'ons oon oon'''''''swiftui视图中的'''''''''''''on on oon on on on ons on on on on on on on on on ons of swiftui视图不起作用,因为它是uiviewController而不是contentView。感谢我能获得的所有帮助,我对此相对较新:(

此图像选择器可以拍摄视频并为该视频生成缩略图。

class PhotoServices: NSObject {
static let shared = PhotoServices()

internal var completion: ((URL)->Void)!
internal let picker = UIImagePickerController()

override init() {
    
    super.init()
    
    self.picker.allowsEditing = false
    self.picker.modalPresentationStyle = .fullScreen
    self.picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
    self.picker.delegate = self
    
}

   func getVideoFromCameraRoll(on: UIViewController, completion: @escaping (_ image: URL)->()) {
    
    self.picker.sourceType = .photoLibrary
    self.picker.mediaTypes = [kUTTypeMovie as String]
    
    DispatchQueue.main.async {
        on.present(self.picker, animated: true) {
            self.completion = completion
             }
          }
       }
    }


   //// MARK: UIImagePickerControllerDelegate methods

   extension PhotoServices: UIImagePickerControllerDelegate, 
   UINavigationControllerDelegate {
   func imagePickerController(_ picker: UIImagePickerController, 
     didFinishPickingMediaWithInfo info: [String : Any]) {
    
    if let url = info[UIImagePickerControllerMediaURL] as? URL {
        
        DispatchQueue.main.async {
            self.picker.dismiss(animated: true) {
                
                self.completion(url)
                
                }
            }
         }
      }
   }

////// MARK: Thumbnail
  extension PhotoServices {


func getThumbnailFrom(path: URL) -> UIImage? {
    
    do {
        
        let asset = AVURLAsset(url: path , options: nil)
        let imgGenerator = AVAssetImageGenerator(asset: asset)
        imgGenerator.appliesPreferredTrackTransform = true
        let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: 
nil)
        let thumbnail = UIImage(cgImage: cgImage)
        
        return thumbnail
        
    } catch let error {
        
        print("*** Error generating thumbnail: \(error.localizedDescription)")
        return nil
        
         }
     }
  }

I'm finding it tough to convert this so that it works in a swiftUI view. I have tried my own variations but the function 'getVideofromCameraRoll' which has an 'on' parameter doesn't work in a SwiftUI view as it's a UIViewController and not ContentView. Appreciate all the help I can get, I'm relatively new to this :(

This image picker takes in video and generates a thumbnail for that video.

class PhotoServices: NSObject {
static let shared = PhotoServices()

internal var completion: ((URL)->Void)!
internal let picker = UIImagePickerController()

override init() {
    
    super.init()
    
    self.picker.allowsEditing = false
    self.picker.modalPresentationStyle = .fullScreen
    self.picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
    self.picker.delegate = self
    
}

   func getVideoFromCameraRoll(on: UIViewController, completion: @escaping (_ image: URL)->()) {
    
    self.picker.sourceType = .photoLibrary
    self.picker.mediaTypes = [kUTTypeMovie as String]
    
    DispatchQueue.main.async {
        on.present(self.picker, animated: true) {
            self.completion = completion
             }
          }
       }
    }


   //// MARK: UIImagePickerControllerDelegate methods

   extension PhotoServices: UIImagePickerControllerDelegate, 
   UINavigationControllerDelegate {
   func imagePickerController(_ picker: UIImagePickerController, 
     didFinishPickingMediaWithInfo info: [String : Any]) {
    
    if let url = info[UIImagePickerControllerMediaURL] as? URL {
        
        DispatchQueue.main.async {
            self.picker.dismiss(animated: true) {
                
                self.completion(url)
                
                }
            }
         }
      }
   }

////// MARK: Thumbnail
  extension PhotoServices {


func getThumbnailFrom(path: URL) -> UIImage? {
    
    do {
        
        let asset = AVURLAsset(url: path , options: nil)
        let imgGenerator = AVAssetImageGenerator(asset: asset)
        imgGenerator.appliesPreferredTrackTransform = true
        let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: 
nil)
        let thumbnail = UIImage(cgImage: cgImage)
        
        return thumbnail
        
    } catch let error {
        
        print("*** Error generating thumbnail: \(error.localizedDescription)")
        return nil
        
         }
     }
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文