图像没有被发送到下一个视图控制器

Image isn't being sent to next view controller

我正在尝试通过 segue 将图像从一个视图发送到另一个视图,并在 UIImageView 中显示所述图像。

以下代码获取图片并将其分配给全局UIImage变量。 请原谅图形代码,我一直在尝试合并图像和文本字段以创建单个图像:

@IBAction func sendSnap(_ sender: Any) {
    var size = CGSize(width: self.takenImage.size.width, height: self.takenImage.size.height)
    UIGraphicsBeginImageContext(size)
    let areaSize = CGRect(x: 0, y: 0, width: self.takenImage.size.width, height: self.takenImage.size.height)
    self.takenImage.draw(in: areaSize)
    var outputImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    self.finalImage = outputImage
}

然后我创建了一个带有从按钮到目标控制器的标识符的 segue,并在准备函数中处理了数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showFinal" {
        let lastVC = segue.destination as! TestingViewController
        lastVC.image = self.finalImage
    }
}

我遇到的问题是出于某种原因,lastVC.image 没有分配给 self.finalImage

我检查了最终图像的 height/width 以确保它不为空。

这是我的 TestingViewController(目的地)代码: @IBOutlet 弱变量显示图像:UIImageView! 变种图像:UIImage = UIImage()

override func viewDidLoad() {
    super.viewDidLoad()
    self.displayImage.image = image
    print(image.size.height) 
    // Do any additional setup after loading the view.
}

image.size.height 正在控制台中打印 0.0 所以我肯定知道图像没有被发送...但我不确定从这里去哪里?

1) 在目标视图中 "showFinal" 为您的图像创建一个参考。

var imageDisplay: UIImage? {
  didSet{
        if let image = imageDisplay {
           self.displayImage.image = image
           self.displayImage.setNeedsDisplay()
    }
}

2) 现在发送这个值。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showFinal" {
    let lastVC = segue.destination as! TestingViewController
    lastVC.imageDisplay = self.finalImage
}

}

我猜你两者都有

@IBAction func sendSnap(_ sender: Any) {}

分配给同一个按钮的 segue。当您点击按钮时,将触发 segue 并调用 prepare() and sendSnap()。 运行第一个是哪个?

更好的方法是创建一个 "named" segue,然后点击按钮调用 sendSnap(),并在 sendSnap() 调用结束时:

performSegue(withIdentifier: "showFinal", sender: self)