2016-05-26 2 views
0

Я использую структуру диаграмм от Danielgindi для представления данных пользователю. Я хочу показать две диаграммы друг на друга, используя CombinedChartView. Две диаграммы: BarChartDataSet и LineChartDataSet. Я могу успешно отображать оба набора данных, однако я не могу контролировать порядок рисования. Бар BarChartDataSet всегда рисуется за LineChartDataSet. Я хочу, чтобы этот ордер был отменен и имел LineChartDataSet сзади (включая любые заливки, которые я применяю к нему).Изменить порядок рисования для комбинированных диаграмм в диаграммах iOS

Мой вопрос

Как я могу изменить порядок рисования для CombinedChartView, чтобы сделать диаграммы линии в задней части и не фронт?

Вот мой код:

// barDataEntries and lineDataEntries are generated in a different section and are not relevant to this question. Any data will do. 
// barDataEntries is of type [BarChartDataEntry]() 
// lineDataEntries is of type [ChartDataEntry]() 
let barChartSet = BarChartDataSet(yVals: barDataEntries, label: "The Bars") 
let lineChartSet = LineChartDataSet(yVals: lineDataEntries, label: "The Line") 
barChartSet.barShadowColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0) // If alpha is > 0, then grey bars will appear. 

// Cosmetic changes for the line chart 
lineChartSet.mode = .CubicBezier 
lineChartSet.lineWidth = 5.0 
lineChartSet.drawCirclesEnabled = false 
lineChartSet.drawFilledEnabled = true 
lineChartSet.colors = [UIColor(red: 0, green: 0, blue: 1, alpha: 0.0)] 
lineChartSet.fillColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1.0) 
lineChartSet.fillAlpha = 0.8 

// Organizing data for statsChartViewController 
let data = CombinedChartData(xVals: xAxis) 
data.lineData = LineChartData(xVals: xAxis, dataSets: [lineChartSet]) 
data.barData = BarChartData(xVals: xAxis, dataSets: [barChartSet]) 

// statsChartViewController is of type CombinedChartView 
statsChartViewController.data = data 
statsChartViewController.leftAxis.axisMinValue = 0 

Вот что я получаю:

Bar and line chart view

+0

Можете ли вы показать, как вы добавляете диаграммы к вашему финалу UIView? – AnthonyR

+0

Диаграмма (это технически только одна), определяется в раскадровке как 'View', заданной для класса' CombinedChartView'. В 'ViewController' (содержит весь код, упомянутый выше),' View' из доски истории связан с IBOutlet '@IBOutlet слабый var statsChartViewController: CombinedChartView!' '' BarChartDataSet' и 'LineChartDataSet' не помещаются отдельно доска рассказов; только 'CombinedChartView'. – Camon

ответ

2

Посмотрев хотя source code, я нашел решение, которое позволяет изменить порядок следования , Класс CombinedChartView имеет публичное перечисление, которое отвечает за порядок жеребьевки:

public enum DrawOrder: Int 
{ 
    case Bar  // 0 
    case Bubble // 1 
    case Line  // 2 
    case Candle // 3 
    case Scatter // 4 
} 

Вы можете изменить порядок следования, установив массив Ints для drawOrder в нужном порядке объекты, которые будут сделаны. В приведенном ниже примере (взято из приведенного выше кода), стержни будут находиться в передней части линий:

// 2 is the line and 0 is the bar. 2 is drawn first, then 0 follows. 
statsChartViewController.drawOrder = [2, 0] 
statsChartViewController.data = data 

Это единственное изменение, которое должно быть сделано. Важно помнить о том, чтобы установить порядок рисования до. Если вы этого не сделаете, порядок розыгрыша останется таким же, как и раньше. Вот новые результаты:

enter image description here

Смежные вопросы