首页 > 解决方案 > 如何将字符串中的图像从 UIImagePickerController 保存到领域?

问题描述

PickerController 类,我在其中创建 UIImagePickerController:

 public protocol ImagePickerDelegate: class {
            func didSelect(image: UIImage?)
        }
        
 open class ImagePicker: NSObject {
        
        private let pickerController: UIImagePickerController
        private weak var presentationController: UIViewController?
        private weak var delegate: ImagePickerDelegate?
    
        public init(presentationController: UIViewController, delegate: ImagePickerDelegate) {
            self.pickerController = UIImagePickerController()
    
            super.init()
    
            self.presentationController = presentationController
            self.delegate = delegate
    
            self.pickerController.delegate = self
            self.pickerController.allowsEditing = true
            self.pickerController.mediaTypes = ["public.image"]
        }
    
        private func action(for type: UIImagePickerController.SourceType, title: String) -> UIAlertAction? {
            guard UIImagePickerController.isSourceTypeAvailable(type) else {
                return nil
            }
    
            return UIAlertAction(title: title, style: .default) { [unowned self] _ in
                self.pickerController.sourceType = type
                self.presentationController?.present(self.pickerController, animated: true)
            }
        }
    
        public func present(from sourceView: UIView) {
    
            let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    
            if let action = self.action(for: .camera, title: "Сделать фото") {
                alertController.addAction(action)
            }
    
            if let action = self.action(for: .photoLibrary, title: "Выбрать из галереи") {
                alertController.addAction(action)
            }
    
            alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    
            if UIDevice.current.userInterfaceIdiom == .pad {
                alertController.popoverPresentationController?.sourceView = sourceView
                alertController.popoverPresentationController?.sourceRect = sourceView.bounds
                alertController.popoverPresentationController?.permittedArrowDirections = [.down, .up]
            }
    
            self.presentationController?.present(alertController, animated: true)
        }
    
        private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
            controller.dismiss(animated: true, completion: nil)
    
            self.delegate?.didSelect(image: image)
        }
    }
    
    extension ImagePicker: UIImagePickerControllerDelegate {
    
        public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            self.pickerController(picker, didSelect: nil)
        }
    
        public func imagePickerController(_ picker: UIImagePickerController,
                                          didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
            guard let image = info[.editedImage] as? UIImage else {
                return self.pickerController(picker, didSelect: nil)
            }
            self.pickerController(picker, didSelect: image)
        }
    }
    
    extension ImagePicker: UINavigationControllerDelegate {
    
    }

我想,在 didFinishPickingMediaWithInfo 我应该做点什么,但不明白到底是什么

类,我使用pickerController的地方:

    class AddPlaneImageController: AddPlaneImageView {
    
    var imagePicker: ImagePicker!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.imagePicker = ImagePicker(presentationController: self, delegate: self)
    }

    
    @IBAction func showImagePicker(_ sender: UIButton) {
        self.imagePicker.present(from: sender)
    }
    
    @IBAction func saveButton(_ sender: Any) {
        RealmModel.shared.addPlaneImage(planeImage: "", aircompany: "") // here I'm supposed to save this image as String to Realm
    }
}

extension AddPlaneImageController: ImagePickerDelegate {

    func didSelect(image: UIImage?) {
        self.planeImage.image = image
    }
}

所以,基本上我不明白,如何将 UIImage() 转换为 String() 并将其保存为 String() 。我在代码中标记了我应该做的地方

标签: iosswiftrealmuiimagepickercontroller

解决方案


推荐阅读