问题描述
我正在创建一个惯性传感器应用程序,其中来自陀螺仪三轴的值将显示在折线图上。 我正在使用此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 (将#修改为@)