Real time chart update in iOS application

I am creating an inertial sensors application where the values from three axis of gyroscope will be displayed on a line chart. I am using this https://github.com/danielgindi/Charts library for the chart implementation.
I have managed to show the values on the chart but the chart stops behaving normally say after 4,5 seconds and does not show the values correctly. Sometimes just the flat line even when i am moving the device and sometimes spikes in the data even when the device is stationary.
Could anyone please let me know where i am making a mistake. Thanks
Here is the code i am using.



Code Block
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), y: Double(0))], label: "y")
set_b.drawCirclesEnabled = false
set_b.setColor(UIColor.green)
let set_c: LineChartDataSet = LineChartDataSet(entries: [ChartDataEntry(x: Double(0), y: 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)
}
}
}
}


I'd confirm with the author of that lib that you are using it's latest version, and, it has been tested/updated for use w/the tools and iOS SDK(s) your app supports.

Good luck.
Real time chart update in iOS application
 
 
Q