2017-08-02 4 views
2

Ich möchte geänderte UIView als UIImage speichern. Es wird jedoch immer als erste (Standard) Ansicht gespeichert.Wie konvertiert (bearbeitet) UIView in UIImage?

Dies ist die erste (Standard) UIView.

enter image description here

Die App nutzt Gradient Animation, die Farbe zu ändern. Die veränderte UIView ist das gleiche wie das folgende Bild:

enter image description here

Ich schrieb den Code wie folgt:

extension UIImage { 
convenience init(layer: CALayer, view: UIView) { 
    UIGraphicsBeginImageContext(view.frame.size) 
    layer.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    self.init(cgImage: (image?.cgImage)!) 
    } 
} 

By the way, das Bild wurde mit dem Standard-UIView gespeichert.

Wie kann ich das Bild mit der geänderten UIView speichern?

[EDIT] Animation hinzufügen-Code

func animateLayer(){ 

    if index == 11 { 
     addEmitter(a: index, b: 0) 
     fromColors = [Colors.fromColorList[index], Colors.fromColorList[0]] 
     toColors = [Colors.toColorList[index], Colors.toColorList[0]] 
     index = 0 
    } else { 
     addEmitter(a: index, b: index + 1) 
     fromColors = [Colors.fromColorList[index], Colors.fromColorList[index+1]] 
     toColors = [Colors.toColorList[index], Colors.toColorList[index+1]] 
     index += 1 
    } 

    animation.fromValue = fromColors 
    animation.toValue = toColors 
    animation.duration = 1.00 

    mind.mindAnimation(animation: animation) 

} 

[EDIT 2] Fügen Sie die ViewDidAppear

override func viewDidAppear(_ animated: Bool) { 

    animation.isRemovedOnCompletion = false 
    animation.fillMode = kCAFillModeForwards 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
    animation.delegate = self 
} 
+0

Code für Animation auch in Frage. Du musst dich dort ändern. – adev

+0

@adev Code für Animation hinzufügen. Vielen Dank. –

+0

Versuchen Sie dies, 'animation.removedOnCompletion = false ', bevor Sie Animationen hinzufügen. – adev

Antwort

2

Um den Inhalt einer animierten Schicht während einer Animation zu erhalten, sollten Sie die Verwendung Präsentationsschicht anstelle der Ebene der Ansicht. Für Ihren Code soll dies so etwas wie diese:

if let layer = view.layer.presentation() { 
    let image = UIImage(layer: layer, view: view) 
    ... 
} 

Sie sollen diesen Code nach der Animation auszuführen hat ein Ende, bevor es aus den Ansichten Schicht entfernt wird.

Wenn Sie die Animation nicht umkehren möchten, sollte es einfacher sein, die Prozedur rückgängig zu machen. Das heißt, Sie tauschen Start- und Endfarben aus und legen die Zielfarben direkt in der Ansicht fest. In diesem Fall müssen Sie die Animation nicht am Ende der Animation belassen, und Sie können die Ebene der Ansicht zum Speichern des Bildes verwenden.

+0

Oh !! Es läuft gut. Vielen Dank. –

Verwandte Themen