Это может быть трудно объяснить геометрию, поэтому я буду осторожен в ее разъяснении. Это видно в стандартном приложении компаса и из данных в CLLocationManager.
1) Когда держите телефон в портретной ориентации, считайте, что угол наклона равен 0°.
2) При наведении камеры на небо (например, при съемке облака) угол наклона изменяется от 0° -> 90°, где 90° соответствует вертикальной плоскости.
3) когда телефон наклонен вверх (> 0 градусов и вращается вокруг оси магнитометра «X») и когда телефон находится примерно (но не точно) на 45 градусов, направление компаса поворачивается на 180 градусов. Таким образом, пока камера все еще находится в точке «N», компас будет сообщать «S».
4) для следующих (примерно) 90 градусов курс по компасу поворачивается на 180 градусов.
Этот поворот курса для меня губителен и не совсем совпадает с акселерометрами. Есть ли хороший учебник (я не нашел его сразу) по использованию данных RAW (X, Y, Z) из данных CLHeading для расчета данных курса?
Конечным результатом является то, что я хочу, чтобы направление компаса всегда совпадало с направлением камеры.