【发布时间】:2018-04-20 11:28:26
【问题描述】:
我一直在为我的应用程序使用 IOS 图表库。我有包含折线图、饼图和条形图的表格视图单元格。我第一次进入应用程序时,显示图表没有问题,但是当我捏放大折线图视图时,我在 AxisRendererBase 类中出现以下错误。
Fatal error: Double value cannot be converted to Int because it is either infinite or NaN。如果我禁用捏缩放它工作正常。我不明白这个问题,我的 configureCell 方法如下。
func configureLineChart(xTitle:IndexAxisValueFormatter, index:Int) {
lineChartView.data?.setDrawValues(false)
lineChartView.doubleTapToZoomEnabled = false
lineChartView.chartDescription?.enabled = false
lineChartView.animate(xAxisDuration: 1)
lineChartView.xAxis.labelPosition = .bottom
lineChartView.xAxis.drawGridLinesEnabled = false
lineChartView.xAxis.labelRotationAngle = 45
lineChartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 8.0)!
lineChartView.xAxis.valueFormatter = xTitle
lineChartView.xAxis.labelCount = index
lineChartView.xAxis.spaceMin = 0.5
lineChartView.xAxis.spaceMax = 0.5
lineChartView.xAxis.granularityEnabled = true
lineChartView.xAxis.granularity = 1
lineChartView.rightAxis.enabled = false
//lineChartView.setScaleEnabled(false)
lineChartView.notifyDataSetChanged()
lineChartView.pinchZoomEnabled = true
}
我在 StackOverFlow 上搜索并尝试了其他答案。但是,我尝试过的没有奏效。可能是什么原因,我该如何解决?
编辑:在我的 cellForRowAt 方法中
let cell = grafikTableView.dequeueReusableCell(withIdentifier: "chartCell") as? ChartsCell
cell?.lineChartView.data = MainGrafikVC.lineChartDataArray[indexPath.row]
cell?.barChartView.data = MainGrafikVC.barChartDataArray[indexPath.row]
cell?.barChartView.isHidden = false
cell?.lineChartView.isHidden = false
if MainGrafikVC.barChartDataArray[indexPath.row].dataSetCount != 0 {
cell?.configureBarChart(xTitle: MainGrafikVC.xTitleArray[indexPath.row], index: MainGrafikVC.barChartDataArray[indexPath.row].getDataSetByIndex(0).entryCount, chartData: MainGrafikVC.barChartDataArray[indexPath.row], chartType: Servisler.servisListesi[MainGrafikVC.indexler[indexPath.row]].chartType)
cell?.lineChartView.isHidden = true
}
if MainGrafikVC.lineChartDataArray[indexPath.row].dataSetCount != 0 {
cell?.configureLineChart(xTitle:MainGrafikVC.xTitleArray[indexPath.row] , index: MainGrafikVC.lineChartDataArray[indexPath.row].getDataSetByIndex(0).entryCount)
cell?.barChartView.isHidden = true
}
当用户想要将图表添加到我的主表视图时,以下代码有效。
if (Servisler.servisListesi[MainGrafikVC.indexler[MainGrafikVC.listIndex]].chartType == "line") {
self.createLineChart()
}
if (Servisler.servisListesi[MainGrafikVC.indexler[MainGrafikVC.listIndex]].chartType == "bar" || Servisler.servisListesi[MainGrafikVC.indexler[MainGrafikVC.listIndex]].chartType == "clustered") {
self.createBarChart()
}
在我的 createLineChart 方法中
func createLineChart() {
let data = LineChartData()
var lineChartEntry1 = [ChartDataEntry]()
for i in 0..<x1.count {
lineChartEntry1.append(ChartDataEntry(x: Double(i), y: Double(x1[i]) ?? 0.0))
}
let line1 = LineChartDataSet(values: lineChartEntry1, label: "1")
data.addDataSet(line1)
if (x2.count > 0) {
var lineChartEntry2 = [ChartDataEntry]()
for i in 0..<x2.count {
lineChartEntry2.append(ChartDataEntry(x: Double(i), y: Double(x2[i]) ?? 0.0))
}
let line2 = LineChartDataSet(values: lineChartEntry2, label: "2")
data.addDataSet(line2)
}
if (x3.count > 0) {
var lineChartEntry3 = [ChartDataEntry]()
for i in 0..<x3.count {
lineChartEntry3.append(ChartDataEntry(x: Double(i), y: Double(x3[i]) ?? 0.0))
}
let line3 = LineChartDataSet(values: lineChartEntry3, label: "3")
data.addDataSet(line3)
}
MainGrafikVC.lineChartDataArray.append(data)
MainGrafikVC.barChartDataArray.append(BarChartData())
MainGrafikVC.xTitleArray.append(IndexAxisValueFormatter(values: xTitle))
}
【问题讨论】:
-
你的 pod 版本是多少?
-
在我的 podfile.lock - Charts (3.1.1): - Charts/Core (= 3.1.1) - Charts/Core (3.1.1) @RazibMollick
-
cell?.configureLineChart() 有两个 arg,你是如何从 cellForRowAt 方法调用的?
-
我写错了我编辑答案的那一行。
-
你能发布 createLineChart() 代码吗?
标签: ios swift uitableview linechart ios-charts