Jak śledzić lokalizację użytkownika z MapKit

głosy
10

Używam MapKit aby wyświetlić położenie względem użytkownika do sworzni wokół nich. Chciałbym, aby móc naśladować funkcjonalność, która dostarcza mapy za pomocą przycisku celownik w dolnym lewym rogu ekranu. Jestem świadom, że już MapKit stanowi przedmiot CLLocation z lokalizacji użytkownika poprzez MKUserLocation, ja po prostu chciałem zasięgnąć porady w jaki sposób należy zachować skupienie się na tym miejscu. Moje początkowe nachylenie było użyć NSTimer aby wyśrodkować mapę na które koordynują co 500ms lub tak.

Czy istnieje lepszy sposób to zrobić? Czy coś wbudowane w MapKit że tęsknię, że będzie to osiągnąć?

Dzięki tak dużo, Brendan

Utwórz 14/03/2010 o 02:09
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
39

Jeśli jesteś na iOS5 + to bardzo łatwe. Wystarczy zmienić „userTrackingMode” za pomocą kodu, takich jak:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

To będzie gładko użytkownikom bieżącą lokalizację. Jeśli przeciągnąć mapę to nawet ustawić tryb śledzenia z powrotem do MKUserTrackingModeNonektórych jest zwykle zachowanie chcesz.

Odpowiedział 20/04/2013 o 10:40
źródło użytkownik

głosy
12

To naprawdę proste, aby mieć mapę zaktualizować lokalizację użytkownika automatycznie podobnie jak Google Maps. Wystarczy ustawić showsUserLocation na TAK

self.mapView.showsUserLocation = YES

... a następnie wdrożyć MKMapViewDelegate aby ponownie wyśrodkować mapę gdy lokalizacja jest aktualizowana.

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

Oraz w celu umożliwienia użytkownikowi powiększać i przesuwać bez kradzież widok z powrotem do bieżącej lokalizacji ...

-(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];
}
Odpowiedział 01/09/2010 o 02:42
źródło użytkownik

głosy
7

Myślę, że ja faktycznie używać CoreLocation CLLocationManageri używać jej metody delegata locationManager:didUpdateToLocation:fromLocation:.

W ten sposób, nie masz napowietrznej NSTimer, a tylko aktualizuje, gdy pojawia się nowa lokalizacja jest niedostępna.

Można wyciągnąć długości i szerokości geograficznej z CLLocationobiektem wysłanym do locationManager:didUpdateToLocation:fromLocation:metody i przekazać je do widoku mapy.

Odpowiedział 14/03/2010 o 05:24
źródło użytkownik

głosy
0

Idę z odpowiedzią Jacoba Relkin użytkownika. Ten kurs zawiera procedury krok po kroku, z użyciem CoreLocation w aplikacji iPhone. Nadzieję, że to pomaga.

Wszystkiego najlepszego.

Odpowiedział 14/03/2010 o 06:17
źródło użytkownik

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