2011-09-27 53 views
1

我正在使用核心绘图(0.4)来呈现图形,它工作正常。但是(特别是在iPad上)图表可能需要一段时间才能呈现。我已经添加了一个UIActivityIndi​​catorView到图表,当图表开始绘制时显示,但是我找不到任何可以用来停止微调的事件。核心情节显示'正在加载'微调器

我已经尝试过使用numberForPlot方法并检测最后一个数据点是否被请求,但是这对于scatterGraph上的每一行都被称为多次,所以我不能轻松使用它。是否有任何图形渲染的事件,我可以为此挂钩?

回答

0

如果你在做[graph reloadData]来更新图表,你可以用你的指示灯开始/停止呼叫来包围那个呼叫吗?我认为核心阴谋在主线程中做了一切。

+0

同样的评论也适用于上述情况。 UI线程没有时间来绘制我认为的微调器。 –

+0

仅供参考,我的确对此进行了整理。我没有在alertView上使用委托方法来表明它已经显示,一旦我使用了这个,alertView就完全出现在图表之前。谢谢你的帮助。 –

0

核心绘图使用Core Animation进行所有渲染。单个图形包含许多独立渲染的CA层。 -reloadData只是告诉图形在下次绘制时更新它的数据缓存,并告诉Core Animation它需要重画。同样,只包围数据源调用只会捕获渲染之前发生的数据缓存。你会错过实际的绘图时间,并且永远不会知道Core Animation是否会在另一次重新渲染图形,比如重新调整大小后。

如果您只关心渲染图的时间而不关注图的其他部分,则执行此操作的一种方法是将子类CPTScatterPlot并覆盖-renderAsVectorInContext:方法。用您的活动指标代码将呼叫列入super

+3

我还在为此而苦苦挣扎。我猜是因为所有的核心绘图操作都在GUI线程上。即使我显示“微调器”,然后调用reloadData然后停止微调器,直到图形操作完成后微调器才显示出来。我只是愚蠢的,有没有办法确保在开始图形重新加载之前绘制微调框? –