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

голоса
10

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

Есть лучший способ сделать это? Есть ли что-то встроенное в MapKit, что я не хватаю, что будет это сделать?

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

Задан 14/03/2010 в 02:09
источник пользователем
На других языках...                            


4 ответов

голоса
39

Если вы на IOS5 + это очень легко. Просто измените «userTrackingMode» с помощью кода, такие как:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Это будет плавно следовать пользователям текущее местоположение. Если вы перетащите карту будет даже установить режим слежения обратно , MKUserTrackingModeNoneкоторый, как правило, поведение , которое вы хотите.

Ответил 20/04/2013 в 10:40
источник пользователем

голоса
12

Это действительно просто, чтобы иметь карту обновлять местоположение пользователя автоматически так же, как Google Maps. Просто установите showsUserLocation в 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];
}
Ответил 01/09/2010 в 02:42
источник пользователем

голоса
7

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

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

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

Ответил 14/03/2010 в 05:24
источник пользователем

голоса
0

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

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

Ответил 14/03/2010 в 06:17
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more