I’m drawing as scrollable graph using a custom extension of CALayer with a bunch of CGContextAddCurveToPoint calls in [ MyCustomCALayer drawInContext].
I’m not actually drawing the whole length of the graph, rather, I’m redrawing the contents of the layer every time a UIPanGestureRecognizer updates to reflect the new horizontal offset. This way, I only draw the visible portion of the graph, and the layer’s bounds only extend to the size of the screen.
[ MyCustomCALayer setNeedsDisplay ] gets called when graph data changes or the pan offset changes, which then causes [ MyCustomCALayer drawInContext] to be invoked.
However, I’m getting this weird ghosting whenever I redraw my layer during panning. A bit of searching around suggests it might be an implicit animation invoked by redrawing the layer’s content, but I can’t find a definitive answer.
Here’s what the graph looks like at rest:

And here it is during panning, with the ghosting redraw:

Certainly, when I do draw the whole graph and adjust the layer’s position property to pan it’s not ghosting, but having a big long bitmap in memory seems like a Bad Thing.
Has anyone seen this kind of ghosting before? If it is (as I suspect) an implicit animation, how can I disable said animation?
It will probably be an implicit animation. Redraws (changes in contents) are animated like everything else in Core Animation.
There are a number of ways to prevent this, if you’re subclassing CALayer to do the drawing the best is to override -[CALayer actionForKey:], returning nil for change in contents: