Lassen Sie mich erklären, was Ihr aktueller Code bewirkt und wie Sie ihn ändern können, um den gesamten Bildschirm zu erfassen, anstatt nur die Antwort zu veröffentlichen.
UIGraphicsBeginImageContext(view.frame.size)
Diese Codezeile erstellt einen neuen Bildkontext mit der gleichen Größe wie view
. Die Hauptsache, die Sie hier mitnehmen sollten, ist, dass der neue Bildkontext dieselbe Größe hat wieview
. Sofern Sie keine Version Ihrer Anwendung mit niedriger Auflösung (ohne Netzhaut) erfassen möchten, sollten Sie wahrscheinlich UIGraphicsBeginImageContextWithOptions
stattdessen verwenden. Dann können Sie übergeben 0.0
, um den gleichen Skalierungsfaktor wie auf dem Hauptbildschirm des Geräts zu erhalten.
view.layer.renderInContext(UIGraphicsGetCurrentContext())
Diese Codezeile rendert die Ebene der Ansicht in den aktuellen Grafikkontext (den gerade erstellten Kontext). Die Hauptsache, die hier weggenommen werden muss, ist, dass nur view
(und ihre Unteransichten) in den Bildkontext gezogen werden.
let image = UIGraphicsGetImageFromCurrentImageContext()
Diese Codezeile erstellt ein UIImage-Objekt aus dem, was in den Grafikkontext gezeichnet wurde.
UIGraphicsEndImageContext()
Diese Codezeile beendet den Bildkontext. Es wird bereinigt (Sie haben den Kontext erstellt und sollten ihn ebenfalls entfernen.
Das Ergebnis ist ein Bild mit der gleichen Größe wie view
mit view
und den darin gezeichneten Unteransichten.
Wenn Sie alles in das Bild zeichnen möchten, sollten Sie ein Bild erstellen, das der Größe des Bildschirms entspricht, und alles, was auf dem Bildschirm angezeigt wird, in das Bild zeichnen. In der Praxis sprechen Sie wahrscheinlich nur über alles im "Schlüsselfenster" Ihrer Anwendung. Da UIWindow
es sich um eine Unterklasse von handelt UIView
, kann sie auch in einen Bildkontext gezeichnet werden.