Es fällt mir schwer, ALLE DATEN von einem CGLayer zu löschen – ist das überhaupt möglich?

StackOverflow https://stackoverflow.com/questions/4594330

  •  15-10-2019
  •  | 
  •  

Frage

Wir erstellen wiederholt einen CGLayer, führen die Verarbeitung durch und geben ihn dann frei.Dies geschieht häufig in Echtzeit.Sicherlich ist es mit großem Aufwand verbunden, jedes Mal einen ganz neuen CGLayer zu erstellen.Also...

Sicherlich wäre es besser, einfach Behalten Sie die Ebene bei und löschen Sie jedes Mal alle Daten daraus – anstatt etwas von Grund auf neu zu erstellen.

Notiz:wenn Sie ein leeres oder klares Rechteck malen, das alles bedeckt, das fügt einfach noch mehr Daten hinzu auf deinen bestehenden Wegen.

Also, wie geht das eigentlich? „löschen“ oder „neu beginnen“ ein CGLayer?

Es gibt eine Funktion CGContextBeginPath(cc), aber sie ist verwirrend:es scheint nur „diesen“ Weg freizumachen, Es scheint nicht, dass der gesamte CGLayer wieder in den Zustand ohne Daten gelöscht wird.

Wie kann ein CGLayer in den Zustand ohne Daten zurückversetzt werden?Weiß jemand?

Aktualisieren...

Es stellt sich heraus, dass es dafür KEINE MÖGLICHKEIT gibt.

Nach umfangreichen Experimenten haben wir festgestellt, dass es scheinbar keine Möglichkeit gibt, alle Daten aus einem CGLayer zu löschen (was wirklich enttäuschend ist).

Beachten Sie, dass das Hinzufügen eines neuen weißen oder durchsichtigen Rechtecks ​​nur dies bewirkt – es werden tatsächlich mehr Daten hinzugefügt.

Daher ist leider keine Möglichkeit bekannt, dies zu tun.Wenn Sie diese bei hohen Hz aufbauen (vielleicht für eine Berechnung), müssen Sie einfach jedes Mal mit einem neuen beginnen.Oder Sie können scheinbar löschen (tatsächlich löschen, nicht nur überdecken) nur der eine Pfad mithilfe von CGContextBeginPath().

Hoffentlich hilft das jemandem in der Zukunft.

War es hilfreich?

Lösung

Sobald Sie den Kontext haben, rufen Sie CGContextClearRect( cc, someRect ) auf, um den Inhalt zu löschen.

Andere Tipps

Warum füllst du es nicht einfach mit einem Rechteck aus (klarer/weißer) Farbe?Stellen Sie sicher, dass die Ebene nicht undurchsichtig ist, wenn Sie sie mit clearColor (transparent) löschen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top