Я экспериментировал с CMDeviceMotion, и особенно с startDeviceMotionUpdatesUsingReferenceFrame.Значения магнитного поля в этом мне не кажутся правильными.
Например, если я сделаю:
CMDeviceMotion *manager = [[CMDeviceMotion alloc] init];
manager.deviceMotionUpdateInterval = 0.1;
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) {
CMMagneticField fld = motion.magneticField.field;
NSLog( @"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z );
[self handleDeviceMotion:manager.deviceMotion];
}];
, он показывает вектор магнитного поля размером около 50, но почти выровненныйс гравитацией.То есть, когда устройство лежит ровно на столе, x и y близки к нулю, а z близка к -50, независимо от того, как я вращаю устройство.
Размер 50 будет правильным по размерудля магнитного поля Земли (согласно Википедии должно быть между 25 и 65 микротеслами), но направление вектора кажется совершенно неправильным.Мне было интересно:
- Это что-то особенное только в моем месте (Стокгольм, Швеция) или
- Свойство magnetField показывает оставшееся магнитное поле без поля Земли, или
- Это ошибка
У вас есть похожий опыт использования свойства MagneticField?