2016-04-06 8 views
2

Ich habe drei Ansichten auf meinem Storyboard, viewA, viewB, viewC.Problem beim Erfassen ausgewählter Ansichten auf dem Bildschirm mit renderInContext in Swift

Ich versuche zu Screen-Capture-nur zwei Ansichten, wie sie auf dem Bildschirm in ihrem aktuellen Ort erscheinen, viewB und viewC.

Das Problem ist, wenn ich sie rende, das resultierende Bild zeigt viewB und viewC an falschen Standorten, ändert sich die Position der Ansichten bewegen oben links (0, 0), siehe Bild.

Wie kann ich den unten stehenden Code korrigieren, so dass ich die Ansichten viewB und viewC genau so erfassen kann, wie sie in der Ansicht positioniert sind, die die folgende renderInContext Implementierung verwendet?

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0) 
self.viewB.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
self.viewC.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
let image = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

enter image description here

Antwort

3

die Dokumente für renderInContext::

Renders in dem Raum der Schicht koordinieren.

Der Layer jeder Ansicht hat einen Ursprung von 0,0, so dass sie jeweils in der oberen linken Ecke erscheinen.

Um dies zu beheben, müssen Sie den Grafikkontext nach dem Ursprung der Ansicht übersetzen, bevor Sie renderInContext: aufrufen.

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0) 
let ctx = UIGraphicsGetCurrentContext() 

CGContextSaveGState(ctx) 
CGContextTranslateCTM(ctx, self.viewB.frame.origin.x, self.viewB.frame.origin.y) 
self.viewB.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
CGContextRestoreGState(ctx) 

CGContextSaveGState(ctx) 
CGContextTranslateCTM(ctx, self.viewC.frame.origin.x, self.viewC.frame.origin.y) 
self.viewC.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
CGContextRestoreGState(ctx) 

let image = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 
+0

Danke für Ihre Antwort @rmaddy. Wie übersetze ich den Grafikkontext konkret? – user4806509

+1

Siehe mein Update. Ich glaube, das ist richtig. Es ist nicht getestet. – rmaddy

+0

Danke @rmaddy. Ich habe das getestet und es funktioniert. Ich musste das '-self.viewC' in' self.viewC' ändern und das '-' entfernen, damit es funktionierte. Ich habe seitdem eine neue Ansicht hinzugefügt und habe Probleme beim Capturen. Aus irgendeinem Grund wird es nie angezeigt. Ich vermute, dass es mit automatischen Einschränkungen zu tun hat, aber ich bin mir nicht sicher, warum ich das untersuche. – user4806509

Verwandte Themen