Передача изображения обратно из контроллера с просмотром и отображение изображения на оригинальном VC - PullRequest
0 голосов
/ 29 сентября 2018

Я прошел через несколько примеров передачи данных между контроллерами представления, используя метод подготовки к segue, а также методы протокола / делегата ... безрезультатно, я все еще застрял в своем проекте и мог бы использовать некоторую помощь.

Я пытаюсь 1) выбрать изображение из VC1, 2) отредактировать изображение в VC2 и 3) передать отредактированное изображение обратно в VC1 и отобразить его.

Я застрял на части возврата и отображения .. вся помощь очень ценится!

У меня есть HomeViewController (VC1), из которого я использую UIImagePicker, чтобы выбрать изображение, а затем просмотреть/ отредактируйте это изображение на другом контроллере представления (VC2), который я помещаю в стек в didFinishPicking ... как показано ниже:

extension HomeViewController : UIImagePickerControllerDelegate {

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        let selectImageandCaptionVC = storyboard?.instantiateViewController(withIdentifier: "SelectImageandCaption") as? SelectImageandCaption

        selectImageandCaptionVC?.image = image

        picker.pushViewController(selectImageandCaptionVC!, animated: true)

    }
  }
}

В VC2 я редактирую изображение, затем пытаюсь передать обратноотредактированное изображение, и отобразите его на VC1.Вот мой код на VC2:

import UIKit

// protocol used for sending data back to HomeViewController
protocol ImageAndCaptionDelegate: class {
func userDidEnterInformation(image: UIImage)
}


class SelectImageandCaption: UIViewController, UIScrollViewDelegate {

weak var delegate: ImageAndCaptionDelegate? = nil

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var imageHeight: NSLayoutConstraint!
@IBOutlet weak var imageWidth: NSLayoutConstraint!


var image : UIImage = UIImage()

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.delegate = self
    imageView.image = image
}


@IBAction func doneButtonPressed(_ sender: Any) {
    //Code that edits image
     let croppedImage = UIImage(cgImage: croppedCGImage!)

    //Pass image pack to HomeViewController
    delegate?.userDidEnterInformation(image: croppedImage)

    // Attempts to go back to the previous view controller and show croppedImage...

    //let HomeViewController = storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as? HomeViewController
    //self.navigationController?.pushViewController(HomeViewController!, animated: true)
    //self.navigationController?.popToViewController(HomeViewController!, animated: true)
    //present(HomeViewController!, animated: true, completion: nil)

    self.dismiss(animated: true, completion: nil)

 }
} 

Назад на VC1 Вот мой код для обрезанного изображения, которое будет возвращено

class HomeViewController: UIViewController, ImageAndCaptionDelegate {

var image : UIImage = UIImage()
var video : AVAsset?
@IBOutlet weak var step1Image: UIImageView!
@IBOutlet weak var step1ProgressImage: UIImageView!


override func viewDidLoad() {
    super.viewDidLoad()

}

func userDidEnterInformation(image: UIImage) {
    self.step1Image.image = image
}

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 29 сентября 2018

Вам необходимо установить делегата

let selectImageandCaptionVC = storyboard?.instantiateViewController(withIdentifier: "SelectImageandCaption") as! SelectImageandCaption
selectImageandCaptionVC.image = image
selectImageandCaptionVC.delegate = self
self.present(selectImageandCaptionVC, animated: true)
...