Swift 隐藏折线图限制线。斯威夫特2

Swift 隐藏折线图限制线。斯威夫特2,swift,linechart,ios-charts,Swift,Linechart,Ios Charts,我正在使用Charts框架(danielgindi/Charts) 我有一段显示1、2和3。根据选择,折线图应在折线图中显示该数量的线。 我有一个switch语句,它取决于显示该行数的段中提供的数字。例如,在案例1中,显示1行、案例2、2行等这正如预期的那样有效 当我尝试在这个switch语句中添加限制行,并从一个较高的情况切换到较低的情况下,例如3到2,第三行不会消失&第1行和第2行似乎有重复 在switch语句中是否有隐藏限制行的方法 我有以下代码: func setChart(xValu

我正在使用Charts框架(danielgindi/Charts)

我有一段显示1、2和3。根据选择,折线图应在折线图中显示该数量的线。 我有一个switch语句,它取决于显示该行数的段中提供的数字。例如,在案例1中,显示1行、案例2、2行等这正如预期的那样有效

当我尝试在这个switch语句中添加限制行,并从一个较高的情况切换到较低的情况下,例如3到2,第三行不会消失&第1行和第2行似乎有重复

在switch语句中是否有隐藏限制行的方法

我有以下代码:

 func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) {
    chartView.descriptionText = ""
    chartView.noDataText = "You need to provide data for the chart."

    print("valuesLineChart has \(valuesLineChart.count) lines")

    var dataSets : [LineChartDataSet] = [LineChartDataSet]()

    switch valuesLineChart.count {

    case 1 : print("1 within switch")

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
    }

    let set1 = LineChartDataSet(yVals: yVals1, label: nil)
    dataSets.append(set1)

    //limit lines
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "switch1, limit1")
    chartView.rightAxis.addLimitLine(limitSet1)

    case 2 :print("2 within switch")

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
    }

    var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
    }

    let set1 = LineChartDataSet(yVals: yVals1, label: nil)
    let set2 = LineChartDataSet(yVals: yVals2, label: nil)

    dataSets.append(set1)
    dataSets.append(set2)

    //limit lines
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
    let limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")

    chartView.rightAxis.addLimitLine(limitSet1)
    chartView.rightAxis.addLimitLine(limitSet2)


    case 3 :print("3 within switch")

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
    }

    var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
    }

    var yVals3 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0..<xValues.count {
        yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i))
    }

    let set1 = LineChartDataSet(yVals: yVals1, label: nil)
    let set2 = LineChartDataSet(yVals: yVals2, label: nil)
    let set3 = LineChartDataSet(yVals: yVals3, label: nil)

    dataSets.append(set1)
    dataSets.append(set2)
    dataSets.append(set3)

    //limit lines
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
    let limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")
    let limitSet3 = ChartLimitLine(limit: limitLines[2], label: "")

    chartView.rightAxis.addLimitLine(limitSet1)
    chartView.rightAxis.addLimitLine(limitSet2)
    chartView.rightAxis.addLimitLine(limitSet3)
    }

    let data: CombinedChartData = CombinedChartData(xVals: xValues)
    data.lineData = LineChartData(xVals: xValues, dataSets: dataSets)
    chartView.data = data
}
func设置图(xValues:[String],valuesLineChart:[Double]],limitLines:[Double]){
chartView.descriptionText=“”
chartView.noDataText=“您需要为图表提供数据。”
打印(“valuesLineChart有\(valuesLineChart.count)行”)
变量数据集:[LineChartDataSet]=[LineChartDataSet]()
开关值NECHART.count{
案例1:打印(“开关内的1”)
变量yVals1:[ChartDataEntry]=[ChartDataEntry]()

对于0..中的i,我找到了问题的解决方案。当段选择不同的数字时,我调用了setChart函数,导致限制线重复

为了解决这个问题,我在调用setChart函数之前删除了限制线

var limitSet1 : ChartLimitLine?
var limitSet2 : ChartLimitLine?
var limitSet3 : ChartLimitLine?
var limitLineArray : [Double]

func removeLimitLines {
    switch (limitLineArray.count) {
            case 1: print("there was 1 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            case 2: print("there was 2 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            chartView.rightAxis.removeLimitLine(limitSet2!)
            case 3: print("there was 3 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            chartView.rightAxis.removeLimitLine(limitSet2!)
            chartView.rightAxis.removeLimitLine(limitSet3!)
    }
}

func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) {
chartView.descriptionText = ""
chartView.noDataText = "You need to provide data for the chart."

print("valuesLineChart has \(valuesLineChart.count) lines")

var dataSets : [LineChartDataSet] = [LineChartDataSet]()

switch valuesLineChart.count {

case 1 : print("1 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
dataSets.append(set1)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "switch1, limit1")
chartView.rightAxis.addLimitLine(limitSet1)

case 2 :print("2 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
let set2 = LineChartDataSet(yVals: yVals2, label: nil)

dataSets.append(set1)
dataSets.append(set2)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")

chartView.rightAxis.addLimitLine(limitSet1)
chartView.rightAxis.addLimitLine(limitSet2)


case 3 :print("3 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
}

var yVals3 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
let set2 = LineChartDataSet(yVals: yVals2, label: nil)
let set3 = LineChartDataSet(yVals: yVals3, label: nil)

dataSets.append(set1)
dataSets.append(set2)
dataSets.append(set3)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")
limitSet3 = ChartLimitLine(limit: limitLines[2], label: "")

chartView.rightAxis.addLimitLine(limitSet1)
chartView.rightAxis.addLimitLine(limitSet2)
chartView.rightAxis.addLimitLine(limitSet3)
}

let data: CombinedChartData = CombinedChartData(xVals: xValues)
data.lineData = LineChartData(xVals: xValues, dataSets: dataSets)
chartView.data = data
}

我找到了解决问题的方法。当线段选择不同的数字时,我调用了setChart函数,导致限制线重复

为了解决这个问题,我在调用setChart函数之前删除了限制线

var limitSet1 : ChartLimitLine?
var limitSet2 : ChartLimitLine?
var limitSet3 : ChartLimitLine?
var limitLineArray : [Double]

func removeLimitLines {
    switch (limitLineArray.count) {
            case 1: print("there was 1 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            case 2: print("there was 2 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            chartView.rightAxis.removeLimitLine(limitSet2!)
            case 3: print("there was 3 limit line, need to remove this from chart view")
            chartView.rightAxis.removeLimitLine(limitSet1!)
            chartView.rightAxis.removeLimitLine(limitSet2!)
            chartView.rightAxis.removeLimitLine(limitSet3!)
    }
}

func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) {
chartView.descriptionText = ""
chartView.noDataText = "You need to provide data for the chart."

print("valuesLineChart has \(valuesLineChart.count) lines")

var dataSets : [LineChartDataSet] = [LineChartDataSet]()

switch valuesLineChart.count {

case 1 : print("1 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
dataSets.append(set1)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "switch1, limit1")
chartView.rightAxis.addLimitLine(limitSet1)

case 2 :print("2 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
let set2 = LineChartDataSet(yVals: yVals2, label: nil)

dataSets.append(set1)
dataSets.append(set2)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")

chartView.rightAxis.addLimitLine(limitSet1)
chartView.rightAxis.addLimitLine(limitSet2)


case 3 :print("3 within switch")

var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}

var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
}

var yVals3 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
    yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i))
}

let set1 = LineChartDataSet(yVals: yVals1, label: nil)
let set2 = LineChartDataSet(yVals: yVals2, label: nil)
let set3 = LineChartDataSet(yVals: yVals3, label: nil)

dataSets.append(set1)
dataSets.append(set2)
dataSets.append(set3)

//limit lines
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "")
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "")
limitSet3 = ChartLimitLine(limit: limitLines[2], label: "")

chartView.rightAxis.addLimitLine(limitSet1)
chartView.rightAxis.addLimitLine(limitSet2)
chartView.rightAxis.addLimitLine(limitSet3)
}

let data: CombinedChartData = CombinedChartData(xVals: xValues)
data.lineData = LineChartData(xVals: xValues, dataSets: dataSets)
chartView.data = data
}