2012-08-14 171 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); 

爲我工作。