2017-06-05 3 views
0

Chartsライブラリを使用してチャートを作成して、アプリに結合チャートを描画しています。異なるxAxisラベルにカスタムラベルカラーをレンダリングするにはどうすればいいですか?

グラフの描画に成功しました。特定のラベルのラベルテキストの色をxAxisに変更します。この例は写真に示されています。私は例03/06 & 06/06の特定の値の色を変更したい絵のようにenter image description here

。私がgithubでライブラリを参照したとき、彼らはこれを達成するためにdrawValues()関数をオーバーライドするように言った。私がプログラミングを素早くするのは初心者だから、これをどうやって達成するのか分からない。この仕事を達成する方法を私に教えてください。前もって感謝します。

答えて

1

(ないXAxisRendererHorizo​​ntalBarChart他の答えが提案のような)drawLabels機能の上に自分の色でこのリストを追加します。

let labelTextColorList = [UIColor.black, UIColor.red, UIColor.blue, UIColor.brown, UIColor.cyan, UIColor.black, UIColor.black, UIColor.black, UIColor.black, UIColor.black, UIColor.black, UIColor.black] 

、このコードでdrawLabels機能を置き換えます:

/// draws the x-labels on the specified y-position 
open func drawLabels(context: CGContext, pos: CGFloat, anchor: CGPoint) 
{ 
    guard 
     let xAxis = self.axis as? XAxis, 
     let viewPortHandler = self.viewPortHandler, 
     let transformer = self.transformer 
     else { return } 

    #if os(OSX) 
     let paraStyle = NSParagraphStyle.default().mutableCopy() as! NSMutableParagraphStyle 
    #else 
     let paraStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle 
    #endif 
    paraStyle.alignment = .center 

    //label attrs moved from here 
    /*   let labelAttrs = [NSFontAttributeName: xAxis.labelFont, 
    NSForegroundColorAttributeName: xAxis.labelTextColor, 
    NSParagraphStyleAttributeName: paraStyle] as [String : NSObject] 
    */ 

    let labelRotationAngleRadians = xAxis.labelRotationAngle * ChartUtils.Math.FDEG2RAD 

    let centeringEnabled = xAxis.isCenterAxisLabelsEnabled 

    let valueToPixelMatrix = transformer.valueToPixelMatrix 

    var position = CGPoint(x: 0.0, y: 0.0) 

    var labelMaxSize = CGSize() 

    if xAxis.isWordWrapEnabled 
    { 
     labelMaxSize.width = xAxis.wordWrapWidthPercent * valueToPixelMatrix.a 
    } 

    let entries = xAxis.entries 

    for i in stride(from: 0, to: entries.count, by: 1) 
    { 

     //label attrs moved to here 
     let labelAttrs: [String: NSObject]! 

     if(i<labelTextColorList.count) { 
      labelAttrs = [NSFontAttributeName: xAxis.labelFont, 
            NSForegroundColorAttributeName: labelTextColorList[i], 
            NSParagraphStyleAttributeName: paraStyle] as [String : NSObject] 
     } 
     else { 
      labelAttrs = [NSFontAttributeName: xAxis.labelFont, 
          NSForegroundColorAttributeName: xAxis.labelTextColor, 
          NSParagraphStyleAttributeName: paraStyle] as [String : NSObject] 

     } 
     if centeringEnabled 
     { 
      position.x = CGFloat(xAxis.centeredEntries[i]) 
     } 
     else 
     { 
      position.x = CGFloat(entries[i]) 
     } 

     position.y = 0.0 
     position = position.applying(valueToPixelMatrix) 

     if viewPortHandler.isInBoundsX(position.x) 
     { 
      let label = xAxis.valueFormatter?.stringForValue(xAxis.entries[i], axis: xAxis) ?? "" 

      let labelns = label as NSString 

      if xAxis.isAvoidFirstLastClippingEnabled 
      { 
       // avoid clipping of the last 
       if i == xAxis.entryCount - 1 && xAxis.entryCount > 1 
       { 
        let width = labelns.boundingRect(with: labelMaxSize, options: .usesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width 

        if width > viewPortHandler.offsetRight * 2.0 
         && position.x + width > viewPortHandler.chartWidth 
        { 
         position.x -= width/2.0 
        } 
       } 
       else if i == 0 
       { // avoid clipping of the first 
        let width = labelns.boundingRect(with: labelMaxSize, options: .usesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width 
        position.x += width/2.0 
       } 
      } 

      drawLabel(context: context, 
         formattedLabel: label, 
         x: position.x, 
         y: pos, 
         attributes: labelAttrs, 
         constrainedToSize: labelMaxSize, 
         anchor: anchor, 
         angleRadians: labelRotationAngleRadians) 
     } 
    } 
} 

結果: enter image description here

2

グラフライブラリのXAxisRendererHorizo​​ntalBarChart.swiftファイルには以下のメソッドがあります。 xAxisのテキストを設定します。ユースケースに合わせてカスタマイズすることができます。 XAxisRenderer.swiftインサイド

open override func drawLabels(context: CGContext, pos: CGFloat, anchor: CGPoint) 
+0

私はこれを行う方法の例を教えていただけますか? –

関連する問題