指定线的Z顺序

问题描述 投票:0回答:1

我绘制了未知数量的系列。为了说明起见,假设有3个。 abc

[这导致第一个系列a被“隐藏”在其他系列之后。当每种颜色都分配了不同的颜色时,这一点最为明显。我可以按相反的顺序绘制它们(从c开始),但图例也将相反。

是否有办法指定a应该在b之上,而b应该在c之上?

ios-charts
1个回答
0
投票

我不确定您使用的是什么图表。但是例如对于LineChartView,您可以将自定义渲染器定义为LineChartRenderer类的后代,并覆盖某些功能,例如drawData。实际上,您可以仅将此函数复制到您的类中,而仅更改数据集的绘制顺序。

class MyCustomRenderer: LineChartRenderer {

    // I define my custom initializer for convenience
    init(for chart: LineChartView) {
        super.init(dataProvider: chart, animator: chart.chartAnimator, viewPortHandler: chart.viewPortHandler)
    }

    init(view: LineChartView) {
        super.init(dataProvider: view, animator: view.chartAnimator, viewPortHandler: view.viewPortHandler)
    }

    override func drawData(context: CGContext)
    {
        guard let lineData = dataProvider?.lineData else { return }

        // Here you can change the drawing order !
        for i in 0 ..< lineData.dataSetCount  
        {
            guard let set = lineData.getDataSetByIndex(i) else { continue }

            if set.isVisible
            {
                if !(set is ILineChartDataSet)
                {
                    fatalError("Datasets for LineChartRenderer must conform to ILineChartDataSet")
                }

                drawDataSet(context: context, dataSet: set as! ILineChartDataSet)
            }
        }
    }
}

然后使用renderer属性为图表渲染设置。

myLineChartView.renderer = MyCustomRenderer(for: myLineChartView)
© www.soinside.com 2019 - 2024. All rights reserved.