2017-03-11 4 views
1

Ich versuche, ein Bild von einer Ansicht zur nächsten über ein Segment zu senden und das Bild in einer UIImageView anzuzeigen. Der folgende Code ruft das Bild ab und ordnet es einer globalen UIImage Variablen zu. Excuse der Grafik-Code, ich habe gespielt, um ein einzelnes Bild zu erstellen versuchen, ein Bild und ein Textfeld zu fusionieren:Bild wird nicht zum nächsten View-Controller gesendet

@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 
} 

Ich habe dann einen Übergang mit einer Kennung zu dem Ziel aus einer Taste los Controller und verarbeitet die Daten innerhalb der func vorbereiten:

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

das Problem ich bin aus irgendeinem Grund wird die lastVC.image nicht mit self.finalImage zugeordnet ist.

Ich habe die Höhe/Breite des endgültigen Bildes überprüft, um sicherzustellen, dass es nicht leer ist.

Hier ist mein Code für TestingViewController (Ziel): @IBOutlet schwach var displayImage: UIImageView! var Bild: 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 wird 0.0 in der Konsole Druck so dass ich auf jeden Fall das Bild weiß nicht gesendet über ist ... aber ich bin nicht sicher, wo man von hier geht?

+0

Haben Sie einen Haltepunkt setzen in preparForSegue um sicherzustellen, dass Ihre Bedingung erfüllt wird und Ihre Aufgabe ausgeführt wird - dh ist das wirklich die ID Ihres Segments? –

+0

Beachten Sie auch: all diese "Selbst". bevor Ihre Eigentumsnamen in Swift nicht benötigt werden. –

+0

Ich legte einen einfachen Ausdruck innerhalb der Segmentbedingung, um sicherzustellen, dass der Code ausgeführt wurde. Das scheint in Ordnung zu sein. Unsicher, wie sonst @AliBeadle getestet werden kann –

Antwort

1

Ich vermute, Sie haben beide

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

und ein Übergang zu der gleichen Taste zugeordnet. Wenn Sie auf die Schaltfläche tippen, wird der Übergang zusammen mit prepare() und sendSnap() aufgerufen. Welche läuft zuerst?

Ein besserer Ansatz wäre, einen „Namen“ segue zu erstellen, müssen dann die Taste tippen rufen sendSnap() und am Ende der sendSnap() -Aufruf:

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

Wenn ich 'performSegue' benutze, kann ich das Bild trotzdem" theDesiredSegue "zuweisen? –

+0

Sure - 'prepare (für segue: UIStoryboardSegue, sender: Any?) {}' Wird immer noch aufgerufen ... das gibt Ihnen nur die Kontrolle über den Ablauf der Operationen. – DonMag

+0

Entschuldigung - Ich hätte einfach Ihren bereits benannten Namen verwenden sollen ... der Schlüssel ist, ihn von der Taste zu entfernen, damit Sie ihn direkt anrufen können. – DonMag

0

1) Erstellen Sie in der Zielansicht "showFinal" eine Referenz für Ihr Bild.

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

2) Senden Sie jetzt diesen Wert.

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

}

Verwandte Themen