Cum să urmeze locația utilizatorului cu MapKit

voturi
10

Sunt folosind MapKit pentru a afișa locația utilizatorului în raport cu pinii din jurul lor. Aș vrea să fie în măsură să imite funcționalitatea care oferă Hărți prin intermediul butonului reticul în colțul din stânga jos a ecranului. Sunt deja conștient de faptul că MapKit oferă un obiect CLLocation cu locația utilizatorului prin intermediul MKUserLocation, am vrut doar să caute consiliere cu privire la modul în care ar trebui să păstreze se concentreze pe acea locație. Înclinația mea inițială a fost de a utiliza un NSTimer pentru a centra harta pe care să coordoneze fiecare 500ms sau cam asa ceva.

Există o modalitate mai bună de a face acest lucru? Există ceva încorporat în MapKit că îmi lipsește, care va realiza acest lucru?

Mulțumesc atât de mult, Brendan

Întrebat 14/03/2010 la 02:09
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
39

Dacă sunteți pe IOS5 + acest lucru este foarte ușor. Doar schimba „userTrackingMode“ folosind codul, cum ar fi:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Acest lucru va urmări fără probleme utilizatorilor locație curentă. Dacă trageți harta va seta chiar modul de urmărire înapoi la MKUserTrackingModeNonecare este de obicei comportamentul pe care îl doriți.

Publicat 20/04/2013 la 10:40
sursa de către utilizator

voturi
12

Este foarte simplu pentru a avea hartă actualizați locația utilizatorului în mod automat la fel ca Google Maps. Pur și simplu setați showsUserLocation la YES

self.mapView.showsUserLocation = YES

... și apoi punerea în aplicare a MKMapViewDelegate pentru a re-centru hartă când locația este actualizată.

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

Și pentru a permite utilizatorului pentru a mări și deplasa fără a fura vizualizarea înapoi la locația curentă ...

-(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];
}
Publicat 01/09/2010 la 02:42
sursa de către utilizator

voturi
7

Cred că mi - ar folosi de fapt CoreLocation CLLocationManagerși de a folosi metoda de delegat locationManager:didUpdateToLocation:fromLocation:.

În acest fel, nu ai deasupra capului unui NSTimer, și actualizează numai atunci când există o locație nouă disponibile.

Puteți trage longitudinea și latitudinea de CLLocationobiectul trimis la locationManager:didUpdateToLocation:fromLocation:metoda și trece - l la vizualizarea hărții.

Publicat 14/03/2010 la 05:24
sursa de către utilizator

voturi
0

Eu merg cu răspunsul lui Iacov Relkin lui. Acest program de instruire oferă o procedură pas cu pas de a folosi CoreLocation într - o aplicație pentru iPhone. Sper că acest lucru vă ajută.

Toate cele bune.

Publicat 14/03/2010 la 06:17
sursa de către utilizator

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