2016-04-10 11 views
1

So habe ich eine UIImageView mit etwas Text überlagert auf der Oberseite und der Unterseite. Ich möchte einen Screenshot erstellen, damit ich ein neues Bild mit dem darüber liegenden Text habe. Dies ist der Code, mit dem ich gearbeitet habe, aber ich kann keinen Screenshot des my UIImageView-Objekts erstellen.Wie mache ich einen Screenshot eines einzelnen View-Objekts statt des gesamten Bildschirms?

func generateImage() -> UIImage 
{ 
    // Render view to an image 
    UIGraphicsBeginImageContext(self.view.frame.size) 
    view.drawViewHierarchyInRect(self.imageView.frame, 
     afterScreenUpdates: true) 
    let memeImage: UIImage = 
    UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return memeImage 
} 

Alternativ habe ich auch versucht, den Code unten, obwohl das Bild der richtige Größe/Bereich des Bildschirms gespeichert, es endet mit verschwommener Version von dem, was ich habe einen Screenshot:

UIGraphicsBeginImageContext(self.imageView.frame.size) 
    let context = UIGraphicsGetCurrentContext() 

imageView.layer.renderInContext(context!) // tried drawInContext but it didn't work at all 
let memeImage = UIGraphicsGetImageFromCurrentImageContext() 

UIGraphicsEndImageContext() 
return memeImage 

Antwort

1

Zunächst können Sie mit UIGraphicsBeginImageContextWithOptions den Skalierungsfaktor an Ihre Bildschirmgröße anpassen. Zweitens wird durch das Übergeben der Ansicht, die Sie erfassen möchten, sichergestellt, dass Sie mit den richtigen Ansichten/Unteransichten arbeiten.

func generateImage(currentView: UIView) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(currentView.frame.size, true, 0.0) 
     currentView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
     let memeImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     //UIImageWriteToSavedPhotosAlbum(memeImage, nil, nil, nil) 

     return memeImage 
    } 
+0

Danke für Ihre Eingabe. Dies ist vergleichbar mit der alternativen Methode, die ich ausprobiert habe. Leider bin ich auf das Problem gestoßen, dass nur das Bild kopiert wurde, aber nicht der Text, den ich auf dem Bild überlagere. Irgendeine Idee, wie man das löst? –

+1

Alle Unteransichten werden eingeschlossen. Ist es möglich, dass Ihr Text keine Unteransicht der Ansicht ist, die Sie erfassen möchten? – squarehippo10

+1

Können wir Subviews zu UIImageView über Storyboard hinzufügen? Es hat mich nicht gelassen. Eine mögliche Lösung könnte darin bestehen, die UIImageView- und UITextLabels in eine UIView einzubinden und die Funktion auf der UIView auszuführen. Ich nehme an, das programmatische Hinzufügen von UITextFields zu UIImageView erfordert auch das programmatische Hinzufügen von Einschränkungen - etwas, das ich zu lernen bereit bin, wenn es das Problem löst. –