Обратный вызов UIImage - ноль в iOS Swift? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть обратный вызов UIImage. Когда VNDocumentCameraViewController завершил вызов, изображение вернется через обратный вызов viewcontroller

public var ImageCalled: ((UIImage?) -> Void)?

Вот VNDocumentCameraViewController завершил метод

     public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
    guard scan.pageCount >= 1 else {
        controller.dismiss(animated: true)
        return
    }

    let originalImage = scan.imageOfPage(at: 0)
    self.imageView.image = originalImage
    var newImage = compressedImage(originalImage)
    print("new image::\(newImage.size)")
    imageNew = newImage
    print("image new", imageNew!)

    imageFromFile { (imm) in

        newImage = imm!
    }
    // callback
    ImageCalled!(newImage)

    controller.dismiss(animated: true)

}

И обратный вызов вызван в viewcontroller:

     vc1.ImageCalled = { (imageReturn) in

        print("image return", imageReturn)

    }

ScannerViewController code:

 public class ScannerViewController: UIViewController, VNDocumentCameraViewControllerDelegate {

public var clientView: UIViewController?
public var imageCallBack: ((UIImage) -> ())?
public var ImageCalled: ((UIImage?) -> Void)?
public var imageDataV: ((Data?) -> Void)?


@IBOutlet weak var imageView: UIImageView!
//    @IBOutlet weak var textView: UITextView!
 var imageNew: UIImage?
 var textVal = [VNRecognizedTextObservation]()
 var textRecognitionRequest = VNRecognizeTextRequest(completionHandler: nil)
  private let textRecognitionWorkQueue = DispatchQueue(label: "MyVisionScannerQueue", qos: .userInitiated, attributes: [], autoreleaseFrequency: .workItem)

  public init() {
             super.init(nibName: "ScannerViewController", bundle: Bundle(for: ScannerViewController.self))
         }

         required init?(coder aDecoder: NSCoder) {
             fatalError("init(coder:) has not been implemented")
         }

override public func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
  //        loadScanner()


}


 public func loadScanner(){
   let scannerViewController = VNDocumentCameraViewController()
   scannerViewController.delegate = self
   present(scannerViewController, animated: true)
 }

 @IBAction func btnTakePicture(_ sender: Any) {

     loadScanner()
  }


@IBAction func saveBtn(_ sender: Any) {

  //        let vc = A8Scan(self)
 //        vc.hideController()
    if let img = imageView.image {

        imageNew = img
        print("image new1", imageNew!)
        ImageCalled!(imageNew)
        print("call back",imageCallBack!(imageNew!))

    }

    self.removeFromParent()
    self.view.removeFromSuperview()
}


private func processImage(_ image: UIImage) {
    imageView.image = image
    print("ia:::\(String(describing: imageView.image))")
 //        recognizeTextInImage(image)
 }

 public func imageFromFile(result: @escaping (_ image: UIImage?) -> Void){

        //the image

    if imageNew != nil {

        result(imageNew)
        print("result", result(imageNew))

        }
        else{
            //callback nil so the app does not pause infinitely if
            //the error != nil
        result(nil)
        }

}



public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
    guard scan.pageCount >= 1 else {
        controller.dismiss(animated: true)
        return
    }

    let originalImage = scan.imageOfPage(at: 0)
    self.imageView.image = originalImage
    var newImage = compressedImage(originalImage)
    print("new image::\(newImage.size)")
    imageNew = newImage
    print("image new", imageNew!)

    imageFromFile { (imm) in

        newImage = imm!
    }
    // callback
    ImageCalled!(newImage)

    controller.dismiss(animated: true)

}

public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFailWithError error: Error) {
    print(error)
    controller.dismiss(animated: true)
}

public func documentCameraViewControllerDidCancel(_ controller: VNDocumentCameraViewController) {
    controller.dismiss(animated: true)
}

func compressedImage(_ originalImage: UIImage) -> UIImage {
    guard let imageData = originalImage.jpegData(compressionQuality: 1),

        let reloadedImage = UIImage(data: imageData) else {

            return originalImage
    }
    return reloadedImage
 }


 }//class

Как получить изображение из обратного вызова? Любая помощь высоко ценится пожалуйста.

...