Несмотря на то, что документация гласит: The maximum frequency at which you can request updates is hardware-dependent but is usually at least 100 Hz.
, мне кажется, что максимальная частота дискретизации по-прежнему равна 100 Гц .
Мой подход к выяснению заключался в использовании существующего примера кода для CoreMotion под названием MotionGraphs.и адаптируя функцию startUpdates
, чтобы она выглядела следующим образом:
func startUpdates() {
guard let motionManager = motionManager, motionManager.isGyroAvailable else { return }
sampleCount = 0
let methodStart = Date()
motionManager.gyroUpdateInterval = TimeInterval(1.0/100000.0) // Hardcoded to something verfy fast
motionManager.startGyroUpdates(to: .main) { gyroData, error in
self.sampleCount += 1
//...view update code removed
if (self.sampleCount >= 100) {
let methodFinish = Date()
let executionTime = methodFinish.timeIntervalSince(methodStart)
print("Duration of 100 Gyro samples: \(executionTime)")
self.stopUpdates()
}
}
}
Я также установил motionManager.deviceMotionUpdateInterval = TimeInterval(1.0/100000.0)
для хорошей меры (в случае, если это глобальная ставка).
С этим кодом вместо для акселерометра и гироскопа Я подтверждаю, что iPhone 8 на iOS 11.4 по-прежнему максимально достигает 100 Гц для обоих.
Duration of 100 Accelerometer samples: 0.993090987205505
Duration of 100 Accelerometer samples: 0.995925068855286
Duration of 100 Accelerometer samples: 0.993505954742432
Duration of 100 Accelerometer samples: 0.996459007263184
Duration of 100 Accelerometer samples: 0.996203064918518
Duration of 100 Gyro samples: 0.989820957183838
Duration of 100 Gyro samples: 0.985687971115112
Duration of 100 Gyro samples: 0.989449977874756
Duration of 100 Gyro samples: 0.988754034042358