2013-04-28 61 views
0

我有優化核心情節圖的問題,如果我想繪製函數y = 8 *的sin(x)我用一個分析,我得到一個範圍值(例如 - 5,+ 5),計算後我繪製圖。 如果我向上或向下拖動某個值,某些值會被覆蓋,所以它們是不必要的,我可以將其刪除,然後在可見範圍內添加一些點以獲得更好的線條。核心情節的數據源 - 問題

現在我有更多間隔的數據源,3陣列與該間隔的y值:-5,-2的0,3一又4,5-(這個數目是例如)。我怎樣才能畫出我的陰謀查看這條線,我需要補充一些像這樣的代碼:

CPTScatterPlot *xSquaredPlot = [[CPTScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.accessibilityFrame]; 
xSquaredPlot.identifier = @"Grafico"; 
xSquaredPlot.interpolation = CPTScatterPlotInterpolationLinear; 
xSquaredPlot.delegate = self; 

CPTMutableLineStyle *lineStyleFunc = [CPTMutableLineStyle lineStyle]; 
lineStyleFunc.lineWidth = 1.0f; 
lineStyleFunc.lineColor = [CPTColor redColor]; 
xSquaredPlot.dataLineStyle = lineStyleFunc; 
xSquaredPlot.dataSource = self; 

[graph addPlot:xSquaredPlot]; 

但問題我,我不知道我怎麼都行,我需要動態創建它,如何我可以做嗎?當我創建新的間隔數組時添加此代碼?但是當我需要更新數據源?

回答

1

核心地塊將跳過落在可見繪圖區外畫點的時候纔可以,所以你不必擔心這樣做,在你的數據源太多了。您不希望在用戶滾動時添加和刪除大量數據點 - 這隻會導致更多的繪圖代碼工作並減慢速度。

既然你正在策劃一個功能,有一兩件事你可以做的是隻在一個相當小的範圍內產生的數據點,說的可見性×範圍之外稍稍。當用戶滾動或縮放圖形時,使用繪圖空間委託來監視更改並根據需要添加點。

使用-insertDataAtIndex:numberOfRecords:方法將數據點添加到情節。這會比-reloadData有更好的性能,這會迫使圖加載所有數據,而不僅僅是新值。 ?

+0

我真的想檢查,但我看到翻譯點繪製的,可能是我做了一些錯誤,當...的情節圖使我的X和Y陣列,所以在-numberOfRecordsForPlot:我回陣列數量,同時在numberForPlot:field:recordIndex:我返回FieldX和FieldY的X或Y數組值是否正確? – kikko088 2013-04-29 11:39:27

+0

如果我嘗試使用這種方法,我得到這個錯誤:終止應用程序由於未捕獲的異常'NSInternalInconsistencyException',原因:'無效的參數不令人滿意:idx <= self.cachedDataCount',我把它叫做裏面 - (CGPoint)plotSpace :(CPTPlotSpace *)空間willDisplaceBy:(CGPoint)位移 – kikko088 2013-04-29 18:52:19