iOS应用程序中的实时图表更新

问题描述

我正在创建一个惯性传感器应用程序,其中来自陀螺仪三轴的值将显示在折线图上。 我正在使用此https://github.com/danielgindi/Charts库进行图表实施。

我设法在图表上显示值,但是图表通常在4.5秒后停止运行,并且无法正确显示值。即使在我移动设备时,有时也只是平坦的线,即使设备静止时,有时数据也会突增。

任何人都可以让我知道我在哪里犯错。谢谢

这是我正在使用的代码



import UIKit
import Charts
import CoreMotion
class ViewController: UIViewController,ChartViewDelegate{

    @IBOutlet var lineChartView: LineChartView!
    
     var motion = cmmotionmanager()
    var xAxisArray : [String]?
    var yAxisArray : [Double]?
    var date : NSDate?
    var dateFormatter : DateFormatter?
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        mygyroscope()
        //charts
        self.lineChartView.delegate = self
        let set_a: LineChartDataSet = LineChartDataSet(entries:[ChartDataEntry(x: Double(0),y: Double(0))],label: "x")
        set_a.drawCirclesEnabled = false
        set_a.setColor(UIColor.blue)

        let set_b: LineChartDataSet = LineChartDataSet(entries: [ChartDataEntry(x: Double(0),label: "y")
        set_b.drawCirclesEnabled = false
        set_b.setColor(UIColor.green)
        
        let set_c: LineChartDataSet = LineChartDataSet(entries: [ChartDataEntry(x: Double(0),label: "z")
        set_c.drawCirclesEnabled = false
        set_c.setColor(UIColor.red)


        self.lineChartView.data = LineChartData(dataSets: [set_a,set_b,set_c])
        
        
        let leftAxis = lineChartView.leftAxis
        leftAxis.labelTextColor = UIColor(red: 51/255,green: 181/255,blue: 229/255,alpha: 1)
        leftAxis.axisMaximum = 10
        leftAxis.axisMinimum = -10
        leftAxis.drawGridLinesEnabled = true
        leftAxis.granularityEnabled = true
        
        lineChartView.animate(xAxisDuration: -1)
        
    }
    
    // add point
    var i = 0
    @objc func updateCounter(x:Double,y:Double,z:Double) {
        
        self.lineChartView.data?.addEntry(ChartDataEntry(x: Double(i),y:x),dataSetIndex: 0)
         self.lineChartView.data?.addEntry(ChartDataEntry(x: Double(i),y:y ),dataSetIndex: 1)
         self.lineChartView.data?.addEntry(ChartDataEntry(x: Double(i),y:z),dataSetIndex: 2)
        self.lineChartView.setVisiblexrange(minxrange: Double(1),maxxrange: Double(50))
        self.lineChartView.notifyDataSetChanged()
        self.lineChartView.moveViewToX(Double(i))
    }

    
    func mygyroscope() {
        motion.startGyroUpdates(to: OperationQueue.current!) { (data,error) in
            
            if let trueData = data {
                self.view.reloadInputViews()
    
                let x = trueData.rotationRate.x
                let y = trueData.rotationRate.y
                let z = trueData.rotationRate.z
                self.i += 1
                self.updateCounter(x: x,y: y,z: z)
                
                
               
            }
        }
    }
    
}






解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)