2017-05-16 48 views
0

我使用iOS-Charts library,我需要繼承HorizontalBarChartRenderer,這樣我可以改變執行drawDataSet(...)。這應該是可能的,如前所述,如在this answer創建自定義的iOS,圖表渲染

所以我創建了自定義渲染,但由於訪問控制,也因爲我使用的CocoaPods我不得不重寫不僅僅是drawDataSet多一點:

  • fileprivate Buffer類
  • fileprivate VAR _buffers =緩衝區
  • fileprivate FUNC prepareBuffer(數據集:IBarChartDataSet,指數:智力)
  • fileprivate VAR _barShadowRectBuffer:的CGRect =的CGRect()打開覆蓋
  • 開放覆蓋FUNC drawDataSet(背景:CGContext上,數據集:IBarChartDataSet, 指數:智力)

我沒有改變任何東西,上述方法只是從HorizontalBarChartRenderer複製,我設置渲染這樣的:

self.horizontalBarView.renderer = HorizontalBarStackRenderer(dataProvider: self.horizontalBarView, animator: self.horizontalBarView.chartAnimator, viewPortHandler: self.horizontalBarView.viewPortHandler). 

當我嘗試運行它,我在BarCharRenderer's drawValues()得到fatal error: Index out of range

let buffer = _buffers[dataSetIndex] 

當我試圖設置渲染標準HorizontalBarChartRenderer以同樣的方式:

self.horizontalBarView.renderer = HorizontalBarChartRenderer(dataProvider: self.horizontalBarView, animator: self.horizontalBarView.chartAnimator, viewPortHandler: self.horizontalBarView.viewPortHandler) 

一切工作正常。我錯過了什麼嗎?

回答

0

我終於知道是什麼問題了,我的子類沒有重寫drawValues()方法,因爲它沒有明確表示它是需要的。此外,此方法正在訪問內部變量shouldDrawValues,因此無法在模塊外訪問。我現在評論了它現在使用的部分,但我必須以某種方式模仿我自己。

+0

嗨,我可以問你如何重寫'drawValues'?...我正在嘗試爲'PieChartRenderer'做同樣的事情,但我不知道從哪裏開始......謝謝! – Pangu

+0

在我的渲染器的子類中,我只是放置了默認'drawValues()'的副本,並將其調整爲符合我的需要。 –

+0

對不起,我在工作。 –