gpt4 book ai didi

iOS Charts(danielgindi) - 如何在每次迭代中更新图表数据?

转载 作者:行者123 更新时间:2023-11-29 05:28:55 25 4
gpt4 key购买 nike

我想使用 iOS 图表 (danielgindi) 来实时(和动画)展示排序算法的步骤。我需要在每次迭代时更新图表,但我找不到这样做的方法。

尝试过:

sortingWindow.reloadInputViews()

sortingWindow.data?.notifyDataChanged();sortingWindow.notifyDataSetChanged();

sortingWindow.animate(xAxisDuration: 1)//sortingWindow.setNeedsDisplay()

@IBOutlet weak var sortingWindow: BarChartView!
var counter = 0
var dataVector = [BarChartDataEntry]()


override func viewDidLoad() {
super.viewDidLoad()
}
///. this works but. not when it is called in the for loop
func updateSorting( values :[BarChartDataEntry]){

var dataSet = BarChartDataSet(values: values, label: "")
var data = BarChartData(dataSets: [dataSet])
sortingWindow.data = data
sortingWindow.notifyDataSetChanged()
}

@IBAction func addNumber(_ sender: Any) {

let number = Int.random(in: 0 ..< 30)
counter=counter+1
var entry = BarChartDataEntry(x: Double(counter), y: Double(number))
dataVector.append(entry)
updateSorting(values:dataVector)

}

@IBAction func sort(_ sender: Any) {

for i in 0...dataVector.count-1{
for j in 0...dataVector.count-2{
if(dataVector[i].y<dataVector[j].y){

var aux = dataVector[i].y
dataVector[i].y=dataVector[j].y
dataVector[j].y=aux
usleep(10000)//0.01s
//updateSorting(values:dataVector)


sortingWindow.reloadInputViews()

sortingWindow.data?.notifyDataChanged();
sortingWindow.notifyDataSetChanged();

sortingWindow.animate(xAxisDuration: 1)
//sortingWindow.setNeedsDisplay()

}
}

}

}

}

最佳答案

我遇到了同样的问题,我想出了一种与下面的方法非常相似的方法。我也尝试了所有更新图表的方法,但没有任何效果,也许有一种简单的方法,这只是我的解决方案!

func updateChart(_ chart: LineChartView) {

var chartsDataSets: [LineChartDataSet] {
var chartDataSets = [LineChartDataSet]()
// sets is an array of Sets, please see the model below
sets.forEach {
var charts = [ChartDataEntry]()
$0.dataSets!.forEach({
let chartEntry = ChartDataEntry(x: Double($0.xValue), y: Double($0.yValue))
charts.append(chartEntry)
})
let set = LineChartDataSet(entries: charts, label: $0.name)
setupSet(set, color: $0.color)

chartDataSets.append(set)
}
return chartDataSets
}
chart.data = LineChartData(dataSets: chartsDataSets)
chart.animate(yAxisDuration: 1, easing: .none)
}

这里有一个模型示例来帮助您理解。

class Set {

let name: String
var dataSets: [DataSet]?
let color: UIColor

init(name: String, dataSets: [DataSet]?, color: UIColor) {
self.name = name
self.dataSets = dataSets
self.color = color
}
}

class DataSet {

let xValue: Int
let yValue: Int
let date: Date?

init(xValue: Int, yValue: Int, date: Date) {
self.xValue = xValue
self.yValue = yValue
self.date = date
}
}

这个模型使您可以拥有同一项目的多个集合,并按集合分隔所有数据。目前我正在使用 core data 来保存所有数据,但它几乎是一样的:)

关于iOS Charts(danielgindi) - 如何在每次迭代中更新图表数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com