Ich denke, Sie könnten falsch interpretieren, was CGContextSaveGState()
und CGContextRestoreGState()
tun. Sie schieben den aktuellen Grafikzustand auf einen Stapel und entfernen ihn, um den aktuellen Zeichenbereich zu transformieren, Linienstile zu ändern usw. und dann den Zustand wiederherzustellen, der vor dem Festlegen dieser Werte vorlag. Zeichnungselemente wie Pfade werden nicht gespeichert.
Vom documentation on CGContextSaveGState():
Jeder Grafikkontext unterhält einen Stapel von Grafiken Staaten. Beachten Sie, dass nicht alle Aspekte der aktuellen Zeichnung Umgebung sind Elemente des Grafikstatus. Zum Beispiel wird der Strompfad nicht als Teil von des Grafikstatus betrachtet und daher nicht gespeichert, wenn Sie die CGContextSaveGState()
Funktion aufrufen.
Der Grafikzustand Stapel sollte am Anfang Ihrer drawRect:
zurückgesetzt werden, weshalb Sie ist es, Fehler bekommen, wenn Sie versuchen, eine Grafikzustand vom Stapel Pop. Da du es nicht weitergeschoben hast, gab es keins, das abspringen könnte. All dies bedeutet, dass Sie Ihre Zeichnung nicht als Grafikstatus auf dem Stapel speichern und später wiederherstellen können.
Wenn Sie nur besorgt sind, ist das Zwischenspeichern Ihrer Zeichnung, die für Sie von der CALayer
, die Ihre UIView
(auf dem iPhone) unterstützt. Wenn Sie nur Ihre Ansicht verschieben, wird sie nicht neu gezeichnet. Es wird nur gezeichnet, wenn Sie es manuell dazu sagen. Wenn Sie einen Teil der Zeichnung aktualisieren müssen, empfehle ich, die statischen Elemente in ihre eigenen Ansichten zu zerlegen oder CALayers
, so dass nur der Teil, der sich ändert, neu gezeichnet wird.
leid, dass ich wieder meinen Code und immer den gleichen Fehler bearbeitet haben – cocoatoucher