Как установить несколько цветов фона в iOS Chart Graph Framework - PullRequest
2 голосов
/ 07 февраля 2020

Я хочу установить несколько цветов фона в виде диаграммы. Один фон может быть установлен на заднем плане вида диаграммы, но нет возможности установить несколько цветов.

For more detail please check the image.

В процентах требуется добавить цвет фона от 0% до 20% - красный цвет, от 21% до 60% - белый и от 61% до 100% - зеленый

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Я думаю, что вы ищете CAGradientLayer, он может вам помочь.

let gradient = CAGradientLayer()
gradient.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
gradient.locations = [0.0, 1.0]

let view = UIView()
view.layer.insertSublayer(gradient, at: 0)

Вид, где вы хотели бы применить коллекторы.

Если вы хотите получить более подробную информацию: https://developer.apple.com/documentation/quartzcore/cagradientlayer

0 голосов
/ 13 февраля 2020

Я так и сделал. Сначала я делаю постоянную высоту ChartView (например, 150). И установите лимиты отрисовки за данными.

// Set the height the chart view
chartViewHeight.constant = 150

//Call below function like this
self.setupCommonProperties(chartView: barChartView)

// Limit line function
   func setLimitLine(chartView: BarLineChartViewBase) {
    let leftAxis = chartView.leftAxis
    leftAxis.removeAllLimitLines()
    var index = 0
    while index < 20 {
        let ll1 = ChartLimitLine(limit: Double(80 + index), label: "")
        ll1.lineWidth = chartViewHeight.constant / 100
        ll1.drawLabelEnabled = false
        ll1.lineColor = NSUIColor(red: 193.0/255.0, green: 255.0/255.0, blue: 189.0/255.0, alpha: 1.0)
        leftAxis.addLimitLine(ll1)

        let ll2 = ChartLimitLine(limit: Double(0 + index), label: "")
        ll2.lineWidth = chartViewHeight.constant / 100
        ll2.drawLabelEnabled = false
        ll2.lineColor = NSUIColor(red: 194.0/255.0, green: 81.0/255.0, blue: 82.0/255.0, alpha: 1.0)
        ll2.lineDashLengths = [0,0]
        leftAxis.addLimitLine(ll2)

        index += 1
    }

    leftAxis.axisMaximum = 100
    leftAxis.axisMinimum = 0
    leftAxis.drawLimitLinesBehindDataEnabled = true
}
0 голосов
/ 12 февраля 2020

Мой способ - использовать заполненные линейные графики для цветов фона. Вам необходимо добавить два дополнительных набора данных, один для красной области и другой для зеленой области. Кроме того, вам нужно использовать пользовательский FillFormatter для заполнения зеленой области сверху до линии графика.

enter image description here

В этом примере я определяю addFillingArea и используйте его для добавления двух дополнительных наборов данных.

override func viewDidLoad() {
    super.viewDidLoad()

    // ...

    let chartData = LineChartData()

    addFillingArea(to: chartData, withColor: .red, xFirstValue: 0, xLastValue: 11, yValue: 6)
    addFillingArea(to: chartData, withColor: .green, xFirstValue: 0, xLastValue: 11, yValue: 12, fillFormatter: TopToLineFillFormatter())

    // add your data to chartData here

    lineChartView.data = chartData

    // ...
}

func addFillingArea(to chartData: ChartData, withColor color: UIColor, xFirstValue: Double, xLastValue: Double, yValue: Double, fillFormatter: IFillFormatter? = nil) {
    let dataEntries = [
        ChartDataEntry(x: xFirstValue, y: yValue),
        ChartDataEntry(x: xLastValue, y: yValue)
    ]

    let chartDataSet = LineChartDataSet(values: dataEntries, label: nil)
    chartDataSet.setColor(.clear)
    chartDataSet.drawValuesEnabled = false
    chartDataSet.drawCirclesEnabled = false

    chartDataSet.drawFilledEnabled = true
    chartDataSet.fillAlpha = 0.5
    chartDataSet.fill = Fill(CGColor: color.cgColor)
    chartDataSet.fillFormatter = fillFormatter

    chartData.addDataSet(chartDataSet)
}

class TopToLineFillFormatter: NSObject, IFillFormatter {
    func getFillLinePosition(dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat {
        var fillMin: CGFloat = 0.0

        fillMin = CGFloat( dataProvider.chartYMax )

        return fillMin
    }
}
...