Показывать направление движения на синей пульсирующей точке (текущее местоположение пользователя) без потери точности круга - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть менеджер CLLocation следующим образом

myLocation = [[CLLocationManager alloc] init];
    myLocation.desiredAccuracy = kCLLocationAccuracyBestForNavigation ;
    myLocation.delegate=self;

, если устройство поддерживает информацию о заголовке, то вызывается метод для обновления заголовка

if([CLLocationManager headingAvailable])
        [myLocation startUpdatingHeading];

, а изменение заголовка извлекается из следующего метода

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    [mymap setTransform:CGAffineTransformMakeRotation(-1 * newHeading.trueHeading * 3.14159 / 180)];

}   

Я могу использовать эту информацию (newHeading.trueHeading) для поворота карты.Но как я могу показать сектор, который будет отображать направление курса с заданной или принудительной точностью, на синей точке (индикатор текущего местоположения пользователя).Я могу использовать пользовательское изображение для синей точки, но оно теряет свет "круг точности".Есть ли способ получить ссылку на синюю точку зрения и изменить ее, чтобы круг точности не терялся.

Также можно избежать вращения аннотаций с отрицательным вращением, но когда карта вращается, «Заголовок» и «подзаголовок» аннотаций расширяются за пределы видимого экрана.Есть ли способ ограничить их видом карты.

Спасибо за любую помощь заранее

Ответы [ 2 ]

1 голос
/ 13 сентября 2011
    - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
        if (newHeading.headingAccuracy > 0) {
                // [newHeading retain];
             float heading = newHeading.trueHeading >= 0 ? newHeading.trueHeading : newHeading.magneticHeading;


             [mymap setTransform:CGAffineTransformMakeRotation(heading)];


        }
    }
1 голос
/ 13 сентября 2011

Вы можете использовать этот проект в качестве руководства.Он вращает весь mapView, но вы можете экстраполировать его на ваш вид.

РЕДАКТИРОВАТЬ: Если вы хотите настроить аннотацию userLocation, вы должны реализовать viewForAnnotation и проверить, является ли данная аннотация MKUserLocation, и вернуть настроенный вид аннотации ViewView, который вы хотите.

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        //Configure your custom view to point to the current heading and return it.

    }

}
...