Размещение синей точки (местоположение пользователя) Только с использованием CLLocationManager - PullRequest
3 голосов
/ 24 февраля 2011

Я прочитал множество постов здесь, в стеке и документах Apple, и не могу найти ничего, чтобы решить эту проблему.

Проблема в том, что если вы установите mapView.showsUserLocation = YES, то MapKit начнет выполнять собственные GPS-запросы к вашему телефону.

Из документов Apple:

Установка этого свойства в YES вызывает вид карты для использования основного местоположения рамки, чтобы найти текущий место нахождения. Пока это свойство ДА, вид карты продолжает отслеживать местоположение пользователя и обновить его периодически.

Если вы также хотите использовать CLLocationManager, то при вызове [mylocationmanager startUpdatingLocation] вы выполняете второй запрос GPS на своем телефоне.

Теперь у вас есть 2 отдельных процесса, запрашивающих местоположение GPS.

Не проблема на симуляторе, но если вы попробуете его на реальном телефоне, потребуется очень и очень много времени, чтобы узнать местоположение GPS. Это также противоречиво 10 секунд - 1 минута, в то время как если вы отключите mapView.showsUserLocation, это займет 2-3 секунды очень последовательно.

В целом использование обоих этих методов очень плохая практика.

Для гибкости и контроля я бы лучше использовал CLLocationManager, но если вы не установите mapView.showsUserLocation = YES, то вы не получите синюю точку!

Я попробовал обычные методы перезаписи аннотации: например:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    if ([annotation isKindOfClass:MKUserLocation.class]) {
        //it's the built-in user location annotation, return nil to get default blue dot...
        return nil;
    }

    //handle your custom annotations...
}

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

Так есть ли у кого-нибудь решение использовать только CLLocationManager для размещения местоположения пользователя на карте?

Ответы [ 2 ]

0 голосов
/ 15 января 2015

Если вам нужно показать только синюю точку вокруг вашего местоположения (точность), вы можете сделать это так:

MKCircle *accuracyCircle;

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// when you want update your position and accuracy
[self.mapView removeOverlay:accuracyCircle];
accuracyCircle = [MKCircle circleWithCenterCoordinate:newLocation.coordinate
                                                    radius:newLocation.horizontalAccuracy];
[self.mapView addOverlay:accuracyCircle];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if([overlay isKindOfClass:[MKCircle class]])
    {
        MKCircleRenderer * circleRenderer = [[MKCircleRenderer alloc] initWithOverlay:overlay];
        circleRenderer.fillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.2];
        return circleRenderer;
    }
    return nil;
}
0 голосов
/ 24 февраля 2011

Недостаточно просто переопределить метод viewForAnnotation. Сначала нужно добавить аннотации к карте, вызвав

[mapView addAnnotation:annotationObject];

Ваш annotationObject может быть экземпляром любого класса, который реализует протокол MKAnnotation.Вы можете найти подробности в Руководстве MapKit в разделе Аннотирующие приложения.

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