2016-03-02 61 views
2

我正在用Swift語言創建一個使用ios-charts API的lineChart。在xAxis上有mm.dd-day格式的日期,例如03.02-星期三。在yAxis有雙重價值。我想每個星期一在xAxis上展示,而不是別的。目前爲止我發現的最佳解決方案是 lineChart.xAxis.setLabelsToSkip(6)是否可以在swift中使用ios-charts逐個手動設置lineChart的xAxis值?

這個跳過了6個標籤,但是它只在圖表數據以星期一的日期開始時才起作用。 喜歡這裏:what I want

但如果我的圖表值開始與週二,我看到的只是週二標籤:what is not good

我有很多想法我應該怎麼做,但我找不到它的解決方案。 我想知道是否有一個函數,什麼可以一個接一個地設置xAxis上的每個標籤,所以我可以用xAxis.values上的for循環來設置標籤,如果它是星期一則可見,如果不是星期一則跳過。這樣的事情:

pseudo: 
for i in lineChart.xAxis.values{ 
    if isMonday(){ 
    //set label visible 
    }else{ 
    //set label invisible 
}} 

但我真的很感謝我的問題的其他解決方案。我已經嘗試使用這個,但它並沒有改變標籤:

lineChartView.xAxis.valueFormatter?.stringForXValue(i, original: "Monday", viewPortHandler: cell.lineChartView.viewPortHandler) 

我試着使用setValueForKey,但我沒有鑰匙,只是索引,我想從開始setLabelsToSkip一個確切的x值,但是這個函數用於整個圖表。

非常感謝您的幫助。

回答

0

您的圖表從星期二開始,它顯示星期二,這是設計,因爲它是第一個值。如果您想要始終顯示星期一,請首先致電 lineChart.xAxis.setLabelsToSkip(1),這會影響xAxis.axisLabelModulus,我們必須確保能夠檢查每個x值以查看它是否爲星期一。

然後,您可以覆蓋x軸rendrer的drawLabels(),如:

public override func drawLabels(context context: CGContext, pos: CGFloat, anchor: CGPoint) 
{ 
    ... // same as super 
    for i in self.minX.stride(to: min(self.maxX + 1, xAxis.values.count), by: xAxis.axisLabelModulus) 
    { 
     let label = xAxis.values[i] 
     if (!isMonday(label)) // implement isMonday() yourself 
     { 
      continue 
     } 
    ... // same as super 
} 
+0

再次感謝你對你的偉大的答案,這是工作。無論如何,我想糾正你,因爲如果我將LaabelsToSkip設置爲1,那麼每週一我都會看到每一個星期,因此要看到每個星期一我必須設置TabelSketch(0) – faklyasgy

+0

這取決於你的邏輯:) – Wingzero

相關問題