Реализация горизонтального компаса на iPhone - алгоритм? - PullRequest
0 голосов
/ 27 марта 2010

Горизонтальный компас выглядит примерно так, если смотреть на восток (90 градусов).

85----90---95

Если бы вы смотрели на 355 градусов северо-западнее, это выглядело бы так:

350----355---0

Когда вы поворачиваете компас, число должно меняться от 0 -> 360 -> 0

Итак, мой вопрос: как бы вы реализовали подобное представление на iPhone? У меня была пара идей:

  1. Сделать одно длинное изображение со всеми числами и отметьте, и сдвиньте его влево / вправо, когда направление компаса изменения

  2. Создание фрагментов вида в виде плиток и добавить их, когда компас изменения курса.

  3. Создайте линию отметок, которая сдвиг с заголовком компаса, и просто напишите на нем числа по мере необходимости.

Как бы вы напали на эту проблему? Я в основном ищу алгоритмический совет, но если у вас есть код или псевдокод для демонстрации, это тоже будет полезно.

Ответы [ 4 ]

1 голос
/ 11 февраля 2011

Вот полное решение для реализации горизонтального компаса в iPhone 4

if ([CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) 
    {
        m_locationManager=[[CLLocationManager alloc]init];
        m_locationManager.desiredAccuracy=kCLLocationAccuracyBest;
        m_locationManager.headingOrientation=CLDeviceOrientationPortrait;;
        m_locationManager.delegate=self;
        [m_locationManager startUpdatingHeading];

    }

Прагма Метка CLLocationManagerDelegate Методы

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    CLLocationDirection direction= newHeading.magneticHeading;
    [m_readingsLabel setText:[NSString stringWithFormat:@"Degrees:%f",direction]];

    float radians=direction*M_PI/180;
    m_compassImageView.transform=CGAffineTransformMakeRotation(radians);
}
1 голос
/ 27 марта 2010

Первый вариант самый простой. Имейте в виду, что вы можете составлять часть изображения, чтобы справиться с циклом.

0 голосов
/ 10 сентября 2010

Вам просто нужно реализовать функции диспетчера местоположения, чтобы найти точное направление, в котором указывает ваш iPhone.

Итак, Вы можете проверить это:

CLLocationManager *locationManager;
[locationManager startUpdatingHeading];

И всякий раз, когда вы вызываете startUpdatingHeading (), он будет вызывать Метод "- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading", который необходимо переопределить в диспетчере местоположений.

И это все, что вы можете найти в каком направлении iPhone 3GS указывает, используя newHeading.magnHeading или newHeading.trueHeading.

Вы удивитесь, что вы можете получить точно такое же направление, которое дает вам магнитный компас.

0 голосов
/ 27 марта 2010

Вы можете построить по модулю 10 заголовок и переключиться на 10, 5 и все остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...