Ich habe gerade mein Spiel umgeschrieben, um die Kernanimation zu verwenden, um es schneller zu machen. Ich habe eine UIView mit einer Ebene, die viele Sublayer (die Spiel-"Kacheln") enthält. Die Kachel-Sublayer sind eigentlich CALayer-Unterklassen, die ihren eigenen Inhalt mit drawInContext:
. Wenn zum Beispiel eine Kachel ausgewählt wird, muss sie neu gezeichnet werden, also rufe ich [tileLayer setNeedsDisplay]
und ich erhalte eine Reihe von Fehlern bei ungültigem Kontext. Wenn ich aufrufe [mainView setNeedsDisplay]
o [mainView.layer setNeedsDisplay]
wird keine der Kacheln neu gezeichnet. Wie kann ich eine einzelne Kachel (CALayer-Unterklasse) zum Neuzeichnen bringen?
EDIT: Aus den sehr hilfreichen Kommentaren konnte ich herausfinden, dass dies nur passiert, wenn die CALayer-Unterklasse ein Bild zeichnet. Hier sind die Fehler:
<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextSetBlendMode: invalid context 0x0
<Error>: CGContextSetAlpha: invalid context 0x0
<Error>: CGContextTranslateCTM: invalid context 0x0
<Error>: CGContextScaleCTM: invalid context 0x0
<Error>: CGContextDrawImage: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
Hier ist die Code-Zeile, die die Fehler verursacht:
[[UIImage imageNamed:@"flag.png"] drawInRect:self.bounds];
Gibt es eine andere Art und Weise, die ich ein Bild in einer CALayer-Unterklasse zeichnen sollte?