Я прочитал множество постов здесь, в стеке и документах 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 для размещения местоположения пользователя на карте?