Укажите Z-порядок строк - PullRequest
       11

Укажите Z-порядок строк

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

Я строю неизвестное число серий. Для объяснения предположим, что их три; a, b и c.

Это приводит к тому, что проблема с первым ser ie a будет «спрятана» за другими сериями. Это наиболее заметно, когда каждому назначают разные цвета. Я мог бы нарисовать их в обратном порядке (начиная с c), но тогда легенда также была бы в обратном порядке.

Есть ли способ указать, что a должно быть поверх b и b поверх c?

1 Ответ

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

Я не уверен, какой именно график вы используете. Но, например, для 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)
...