Как я масштабирую MKMapView пользователям текущее местоположение без CLLocationManager?

С MKMapView существует опция, названная "Выставочные пользователи текущее местоположение", которое автоматически покажет пользовательское местоположение на map.

Я хотел бы переместить и масштабировать к этому местоположению, когда оно нашло (и если оно изменяется).

Проблема, кажется, нет никакого метода, названного, когда пользовательское местоположение обновляется на map, таким образом, я нигде не должен помещать код, который будет zoom/scroll.

Есть ли путь, который будет уведомлен когда MKMapView имеет (или обновленный) пользовательское местоположение, таким образом, я могу перемещаться/масштабировать в него? Если я использую свое собственное CLLocationManager обновления, которые я получаю, не соответствуют обновлениям пользовательского маркера на карте, таким образом, выглядит глупым, когда мои перемещения карты и масштабируют за секунды до того, как синий контакт появляется.

Это чувствует себя подобно основной функциональности, но я провел недели, ища решение и не поднял что-нибудь похожее.

70
задан Girish 4 March 2013 в 14:12
поделиться

2 ответа

Вы должны зарегистрироваться для получения уведомлений KVO о свойстве userLocation.location MKMapView .

Для этого поместите этот код в viewDidLoad: вашего ViewController или где-нибудь в том месте, где инициализируется ваше представление карты.

[self.mapView.userLocation addObserver:self  
        forKeyPath:@"location"  
           options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)  
           context:NULL];

Затем реализуйте этот метод для получения уведомлений KVO

- (void)observeValueForKeyPath:(NSString *)keyPath  
                      ofObject:(id)object  
                        change:(NSDictionary *)change  
                       context:(void *)context {  

    if ([self.mapView showsUserLocation]) {  
        [self moveOrZoomOrAnythingElse];
        // and of course you can use here old and new location values
    }
}

Этот код мне подходит.
Кстати, self в этом контексте мой ViewController.

106
ответ дан 24 November 2019 в 13:13
поделиться

Нет проблем ... Внутри метода viewDidLoad вашего подкласса UIViewController, который имеет MKMapView, добавьте это (при условии, что ваш MKMapView называется map):

CLLocation *location = [[[CLLocation alloc] initWithLatitude:map.centerCoordinate.latitude longitude:map.centerCoordinate.longitude] autorelease]; //Get your location and create a CLLocation
MKCoordinateRegion region; //create a region.  No this is not a pointer
region.center = location.coordinate;  // set the region center to your current location
MKCoordinateSpan span; // create a range of your view
span.latitudeDelta = BASE_RADIUS / 3;  // span dimensions.  I have BASE_RADIUS defined as 0.0144927536 which is equivalent to 1 mile
span.longitudeDelta = BASE_RADIUS / 3;  // span dimensions
region.span = span; // Set the region's span to the new span.
[map setRegion:region animated:YES]; // to set the map to the newly created region
1
ответ дан 24 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: