Vous accédez à l'accélération brute, qui comprendra la gravité. Cela signifie que (0, 0, -1) est en réalité évidemment correct.
Si vous souhaitez quelque chose d'un peu plus stable (et sans le vecteur de gravité), utilisez le mouvement de l'appareil. Il convient de noter que les données provenant de l'interface de mouvement de l'appareil sont filtrées et stabilisées à l'aide de méthodes de filtrage par fusion de capteurs, de sorte que les données d'accélération seront plus précises.
import UIKit
import CoreMotion
class ViewController: UIViewController {
let motionManager = CMMotionManager()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
motionManager.deviceMotionUpdateInterval = 0.1
motionManager.startDeviceMotionUpdates(to: .main) { (motion, error) in
if let motion = motion {
var x = motion.userAcceleration.x
var y = motion.userAcceleration.y
var z = motion.userAcceleration.z
// Truncate to 2 significant digits
x = round(100 * x)/100
y = round(100 * y)/100
z = round(100 * z)/100
// Ditch the -0s because I don't like how they look being printed
if x.isZero && x.sign == .minus {
x = 0.0
}
if y.isZero && y.sign == .minus {
y = 0.0
}
if z.isZero && z.sign == .minus {
z = 0.0
}
print(String(format: "%.2f, %.2f, %.2f", x, y, z))
}
}
}
}
D'ailleurs, cela est en the docs, premier alinéa.
Après la création d'une instance de CMMotionManager, une application peut utiliser pour recevoir quatre types de mouvement: données de l'accéléromètre brut, des données gyroscopiques premières données magnétométriques brutes et traitées des données dispositif de mouvement (qui comprend un accéléromètre, Rotation- taux, et mesures d'attitude). Les données de mouvement du dispositif traitées fournies par les algorithmes de fusion de capteurs de Core Motion donnent l'attitude du dispositif, le taux de rotation, les champs magnétiques calibrés, la direction de la gravité et l'accélération que l'utilisateur donne à l'appareil.
Pourquoi n'est-ce pas? Il y a une constante -1g due à la gravité de la Terre. – Paulw11