2017-04-19 1 views
2

enter image description hereMeine Ansicht Hierarchie istSpeichern einer Bildansicht mit einem weiteren maskierten ImageView?

InhaltAlle enthält Hintergrund Image und einer Front Image

Was ich versuche, so schnell wie meine Ansicht Laden bekommt zu tun ist, dh viewDidLoad() i genannt wird Ich verwende eine Maskierung auf dem vorderen ImageView. Wie folgt aus:

func viewDidLoad() { 

    maskLayer.frame = frontImageView.bounds 
     maskLayer.shadowRadius = 5 
     maskLayer.shadowPath = CGPath(roundedRect: frontImageView.bounds.insetBy(dx: CGFloat(5), dy: CGFloat(5)), cornerWidth: 10, cornerHeight: 10, transform: nil) 
     maskLayer.shadowOpacity = 15 
     maskLayer.shadowOffset = CGSize.zero 
     maskLayer.shadowColor = UIColor.white.cgColor 
     frontImageView.layer.mask = maskLayer 

} 

und dann, was ich will, ist das Bild zu speichern, die ich habe, und ich tue es wie folgt aus:

ich diese Methode nenne das Bild zu bekommen:

func returnFinalImage() -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(backGroundImageView.frame.size, backGroundImageView.isOpaque, 0.0) 
     contentView.layer.render(in: UIGraphicsGetCurrentContext()!) 
     let finalImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return finalImage! 
    } 

Aber wenn das Bild in der Photos-Bibliothek gespeichert wird, bekomme ich eine leere Leinwand ohne Bild.

Ich hoffe, ich bin in der Lage, mir selbst zu vermitteln. Jede Hilfe wird geschätzt.

Antwort

2

ich herausgefunden ersetzen, wie es geht. Es folgt der Code:

func returnFinalImage() -> UIImage { 

    UIGraphicsBeginImageContext(CGSize(width: CGFloat(contentView.frame.size.width), height: CGFloat(contentView.frame.size.height))) 
    view.drawHierarchy(in: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(view.frame.size.width), height: CGFloat(view.frame.size.height)), afterScreenUpdates: true) 
    let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image! 
} 
0

Sie rendern von der contentView-Ebene, während an keiner anderen Stelle im Code eine Erwähnung von contentView angezeigt wird.

Ich würde empfehlen,

contentView.layer.render(in: UIGraphicsGetCurrentContext()!) 

mit

frontImageView.layer.render(in: UIGraphicsGetCurrentContext()!) 
+0

InhaltAlle ist die Ansicht, auf dem Beide meiner Image d.h Hintergrund Bildansicht und vordere Bildansicht platziert ist, Wo ist mein Hintergrund Image von gleicher Größe ist wie die des Inhalt anzeigen. –

+0

Ich habe den Screen Shot sowie die Hierarchie angehängt. Bitte schau es dir an. –

+0

Denken Sie an "UIGraphicsBeginImageContextWithOptions", wenn Sie eine leere Arbeitsfläche erstellen. Dann, indem Sie 'layer.render (in: UIGraphicsGetCurrentContext()!)' Verwenden, werden Sie aufgefordert, die Ebene auf die Zeichenfläche zu zeichnen. In Ihrem Fall wurde der Ebene von contentView nie etwas zugewiesen. Wenn Sie also conteView.layer rendern, erhalten Sie eine leere Leinwand. Sehen Sie, wenn es zum frontImageView ändert, hilft. – Malik

Verwandte Themen