jjzjj

ios - 核心剧情: should adding a CPTPlotSpaceAnnotation to plot space cause the entire graph to be redrawn?

我正在使用CorePlot来显示价格的时间序列。当用户触摸图形时,我会在该点显示一条可拖动的垂直线。时间序列和可拖动线都是CPTXYGraph中的CPTScatterPlot对象。这非常有效-在时间序列图上拖动线时的性能是可以接受的。下一阶段是在用户选择的位置显示价格和日期。YahooStocksApp有一个很好的功能,它在标签中显示价格,标签会移动,就好像它附在可拖动线的顶部一样。我尝试使用CPTPlotSpaceAnnotation中显示的文本来复制它。这可行,但会严重影响性能。经过一番挖掘,我发现CPTLayerdrawInContext:被调用了多次——看起来每次我重绘文本标签

ios - -[CALayer setNeedsDisplayInRect :] causes the whole layer to be redrawn

我将CALayer子类化以提供我自己的绘图方法。为了优化,我调用了-[MyLayersetNeedsDisplayInRect:]而不是-[MyLayersetNeedsDisplay]。在绘图方法中,我得到了应该通过CGContextGetClipBoundingBox()重绘的矩形。如果我将此层用作UIView的基础层,一切都会按预期进行。一旦我将自定义层用作其他CALayer的子层,问题就出现了。比CGContextGetClipBoundingBox()总是返回该层边界的矩形。有什么想法吗?[编辑]似乎并不能保证CALayer的内容会被缓存,只有脏的部分会被重绘。我做了一个小测