2012-08-14 115 views
1

我正在使用CorePlot创建一个小的iPhone应用程序。该图由10个小节组成。不幸的是,y值可能在0和1亿美元之间有所不同,所以我创造我plotspace一个相当庞大的yRange如何绘制一个巨大的Y轴Coreplot条形图?

plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(yAxisStart) 
               length:CPTDecimalFromDouble(yAxisLength)]; 

我所经历的是加载图形时,我的应用程序实在是太慢了,我可以将这个问题指向yAxisLength相当大的值。我已经删除了y轴上创建的tickmarks,但仍然表现非常糟糕。任何人都可以给我一个提示如何提高性能?

回答

3

请确保更新标签参数,即使您不需要任何标签或刻度。默认的标签政策会将刻度标记和标签分开一个单元。这就是为什么大轴范围会减慢你的应用程序的速度。它还为每个标签创建一个单独的Core Animation层。创建100万个标签需要很长时间并使用大量内存。

如果您不需要任何刻度或标签,请将标签策略设置为CPTAxisLabelingPolicyNone。否则,对各种标签属性进行必要的调整(要使用哪些属性取决于您选择的策略),以便轴范围内有合理数量的刻度。

+0

埃里克,感谢你的提示,就像一个魅力。但是,我需要4个标签,但我想我可以简单地将它们作为自定义标签提供,而不会损失性能? – moq 2012-08-15 13:29:00

+1

要么将​​'majorIntervalLength'设置为较大的值,例如250,000,要么更改标签策略。 Plot Gallery示例应用程序展示了所有可用策略。 – 2012-08-15 22:21:44

0

我没有使用CorePlot,但也许你可以在试图绘制它之前调整你的数据。

如果y范围高达一百万,则将y-max和所有y值除以100,000。然后,只需将“(x100,000)”添加到y轴标签。

+0

感谢您的提示,听起来像一个很好的解决方法。 – moq 2012-08-14 15:18:56

0
y.labelingPolicy  = CPTAxisLabelingPolicyAutomatic; 
    y.majorGridLineStyle = nil; 
    y.minorGridLineStyle = nil; 
    y.axisConstraints  = [CPTConstraints constraintWithLowerOffset:0.0]; 
    y.majorIntervalLength = CPTDecimalFromDouble(maxRange/2.0); 

为我工作。