0

我有一个图表,我想用最近的结果加载数据。

这是一个屏幕截图,向您展示它的外观。

我能够正确显示初始数据,但是之后我无法更新视图以显示添加到其中的新数据。

该图是带有自定义类 MacawChartView 的故事板上的视图。

class ViewControllerResultsView: ViewController, GADInterstitialDelegate {

@IBOutlet var chartView: MacawChartView!    

override func viewDidLoad() {
    chartView.frame = CGRect(x: w/2 - (w * 0.95)/2, y: h * 0.57, width: w * 0.95, height: w * 0.45)
    chartView.backgroundColor = UIColor.init(displayP3Red: 253/255, green: 254/255, blue: 149/255, alpha: 1)
    chartView.contentMode = .scaleAspectFit
    MacawChartView.playAnimations()

我尝试了很多不同的方法来“重新运行”图表,以便使用更新的数据重建,但无法通过所需的“coder aDecoder:NSCoder”参数。这是 MacawChartView.swift 中的初始化程序

    required init?(coder aDecoder: NSCoder){
    super.init(node: MacawChartView.createChart(), coder: aDecoder)
}

谢谢你的帮助。如果需要更多信息等,请告诉我。

4

1 回答 1

1

文档对于这个库来说不是很好,但这里有一个适合你的解决方案。我从 gitHub 上的示例项目开始,但我删除了init函数并制作了数据var

class CustomMacawView: MacawView {

static var data: [Double] = [101, 142, 66, 178, 92]
static let palette = [0xf08c00, 0xbf1a04, 0xffd505, 0x8fcc16, 0xd1aae3].map { val in Color(val: val)}


public func updateData(newData : [Double])
{
    CustomMacawView.data = newData
    updateDisplay()
}

public func updateDisplay()
{
    let chart = CustomMacawView.createChart()
    self.node = Group(contents: [chart])
}

在我的主视图控制器中,我有一个按钮来生成新数据

@IBAction func cmdUpdateGraph(_ sender: Any) {
    macawView.updateData(newData: [Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100)]) }
于 2020-05-20T10:40:36.833 回答