【问题标题】:Pie chart using Charts library with iOS swift 3使用带有 iOS swift 3 的 Charts 库的饼图
【发布时间】:2017-02-18 14:05:55
【问题描述】:

我想在 Github 上使用 piechart danielgindi/Charts 库。 我的代码是这样的:

import UIKit
import Charts

class ChartViewController: UIViewController {

    @IBOutlet weak var pieChartView: PieChartView!

    override func viewDidLoad() {
        super.viewDidLoad()

    // Do any additional setup after loading the view.

        let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
        let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0]

        setChart(dataPoints: months, values: unitsSold)

    }


    func setChart(dataPoints: [String], values: [Double]) {

        var dataEntries: [ChartDataEntry] = []

        for i in 0..<dataPoints.count {
            let dataEntry1 = PieChartDataEntry(value: Double(i), label: dataPoints[i], data:  dataPoints[i] as AnyObject)
            dataEntries.append(dataEntry1)
        }

        let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "Units Sold")
        let pieChartData = PieChartData(dataSet: pieChartDataSet)
        pieChartView.data = pieChartData

        var colors: [UIColor] = []

        for _ in 0..<dataPoints.count {
            let red = Double(arc4random_uniform(256))
            let green = Double(arc4random_uniform(256))
            let blue = Double(arc4random_uniform(256))

            let color = UIColor(red: CGFloat(red/255), green: CGFloat(green/255), blue: CGFloat(blue/255), alpha: 1)
            colors.append(color)
        }

        pieChartDataSet.colors = colors
    }
}

但是当我运行它时,分解这一行:

pieChartView.data = pieChartData

我之前没有使用任何图表库,但是我必须使用一个项目。这个图书馆或另一个图书馆对我来说并不重要。如果您知道回答我的问题,请帮助我解决。或者你可以给我建议另一个兼容 switf 3 的库。谢谢。

【问题讨论】:

  • 您是否连接了您的 pieChartView 插座?编译器向您显示什么错误?
  • 是的,我连接了 pieChartView @TomKnapen。只是在 pieChartView 爆发的时候。在控制台(lldb)中我猜是零对象错误。

标签: ios swift charts swift3 pie-chart


【解决方案1】:

我以编程方式初始化pieChartView 并将其添加到子视图中。代码运行良好,不会崩溃。我进行了必要的更改并在下面添加了它:

import UIKit
import Charts

class ChartViewController: UIViewController {

   var pieChartView: PieChartView!

   override func viewDidLoad() {
       super.viewDidLoad()

       // Do any additional setup after loading the view.

       let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
       let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0]

       pieChartView = PieChartView(frame: self.view.bounds)
       self.view.addSubview(pieChartView!)
       setChart(dataPoints: months, values: unitsSold)
   }

   func setChart(dataPoints: [String], values: [Double]) {

       var dataEntries: [ChartDataEntry] = []

       for i in 0..<dataPoints.count {
           let dataEntry1 = PieChartDataEntry(value: values[i], label: dataPoints[i])
           dataEntries.append(dataEntry1)
       }

       let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "Units Sold")
       let pieChartData = PieChartData(dataSet: pieChartDataSet)
       pieChartView.data = pieChartData

       var colors: [UIColor] = []

       for _ in 0..<dataPoints.count {
           let red = Double(arc4random_uniform(256))
           let green = Double(arc4random_uniform(256))
           let blue = Double(arc4random_uniform(256))

           let color = UIColor(red: CGFloat(red/255), green: CGFloat(green/255), blue: CGFloat(blue/255), alpha: 1)
           colors.append(color)
       }

       pieChartDataSet.colors = colors
   }
}

【讨论】:

  • 它对我有用,谢谢。但是为什么不使用 unitsSold 值呢?
  • @DeliCevat,那是因为您没有在原始代码中正确设置数据。让我更新我的答案以包括这一点。
  • 谢谢,我想知道为什么在下面的视图中只有 'Jan' ?可能是每个月?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2015-11-06
  • 1970-01-01
相关资源
最近更新 更多