Как следовать за пользовательским местоположением с MapKit

Я использую MapKit для отображения местоположения пользователя относительно контактов вокруг них. Я хотел бы смочь подражать функциональности, которая Карты обеспечивает через кнопку перекрестия в нижнем левом углу экрана. Я уже знаю, что MapKit предоставляет объекту CLLocation местоположение пользователя через MKUserLocation, я просто хотел обратиться за советом о том, как я должен сосредоточить внимание на том местоположении. Мой начальный наклон состоял в том, чтобы использовать NSTimer для центрирования карты на той координате каждые 500 мс или около этого.

Существует ли лучший способ сделать это? Там что-то встроено к MapKit, который я пропускаю, который выполнит это?

Большое спасибо, Brendan

10
задан bloudermilk 14 March 2010 в 01:09
поделиться

3 ответа

Я думаю, что на самом деле я бы использовал CoreLocation CLLocationManager и использовал его метод делегата locationManager:didUpdateToLocation:fromLocation:.

Таким образом, у вас не будет накладных расходов на NSTimer, и обновление произойдет только тогда, когда будет доступно новое местоположение.

Вы можете извлечь долготу и широту из объекта CLLocation, отправленного в метод locationManager:didUpdateToLocation:fromLocation:, и передать их в представление карты.

7
ответ дан 3 December 2019 в 13:17
поделиться

Я соглашаюсь с ответом Якова Релкина. Этот учебник содержит пошаговую процедуру использования CoreLocation в приложении для iPhone. Надеюсь, это вам поможет.

Всего наилучшего.

0
ответ дан 3 December 2019 в 13:17
поделиться

Очень просто сделать так, чтобы карта автоматически обновляла местоположение пользователя, как карты Google. Просто установите для showUserLocation значение YES

self.mapView.showsUserLocation = YES

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

-(void)               mapView:(MKMapView *)mapView 
        didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if( isTracking )
    {
        pendingRegionChange = YES;
        [self.mapView setCenterCoordinate: userLocation.location.coordinate
                                 animated: YES];
    }
}

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

-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    if( isTracking && ! pendingRegionChange )
    {
         isTracking = NO;
         [trackingButton setImage: [UIImage imageNamed: @"Location.png"] 
                         forState: UIControlStateNormal];
    }

    pendingRegionChange = NO;
}

-(IBAction) trackingPressed
{
    pendingRegionChange = YES;
    isTracking = YES;
    [mapView setCenterCoordinate: mapView.userLocation.coordinate 
                        animated: YES];

    [trackingButton setImage: [UIImage imageNamed: @"Location-Tracking.png"] 
                    forState: UIControlStateNormal];
}
12
ответ дан 3 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

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