Hvordan å følge brukeren beliggenhet med MapKit

stemmer
10

Jeg bruker MapKit å vise brukeren befinner seg i forhold til pinnene rundt dem. Jeg vil gjerne være i stand til å etterligne funksjonalitet som Maps gir via trådkorset knappen i nedre venstre hjørne av skjermen. Jeg er allerede klar over at MapKit gir en CLLocation objekt med brukerens plassering via MKUserLocation, jeg ville bare søke råd om hvordan jeg bør holde fokus på det stedet. Min første tilbøyelighet var å bruke en NSTimer å sentrere kartet på at koordinere hvert 500ms eller så.

Finnes det en bedre måte å gjøre dette? Er det noe innebygd i MapKit at jeg mangler som vil gjøre dette?

Takk så mye, Brendan

Publisert på 14/03/2010 klokken 01:09
kilden bruker
På andre språk...                            


4 svar

stemmer
39

Hvis du er på iOS5 + Dette er veldig enkelt. Bare endre "userTrackingMode" med kode som:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Dette vil jevnt følge brukerne nåværende posisjon. Hvis du flytter kartet vil selv sette sporingsmodus tilbake til MKUserTrackingModeNonesom vanligvis er den atferden du ønsker.

Svarte 20/04/2013 kl. 09:40
kilden bruker

stemmer
12

Det er veldig enkelt å ha kartet oppdatere brukerens plassering automatisk akkurat som Google Maps. Bare still showsUserLocation til JA

self.mapView.showsUserLocation = YES

... og deretter gjennomføre MKMapViewDelegate å sentrere kartet når plasseringen er oppdatert.

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

Og for å tillate brukeren å zoome og panorere uten å stjele utsikten tilbake til nåværende plassering ...

-(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];
}
Svarte 01/09/2010 kl. 01:42
kilden bruker

stemmer
7

Jeg tror at jeg faktisk ville bruke CoreLocation CLLocationManagerog bruke sin delegat metode locationManager:didUpdateToLocation:fromLocation:.

På denne måten trenger du ikke overhead av en NSTimer, og det bare oppdaterer når det er et nytt sted tilgjengelig.

Du kan trekke lengde- og breddegrad fra CLLocationobjektet sendes til locationManager:didUpdateToLocation:fromLocation:metoden, og gi det til kartvisningen.

Svarte 14/03/2010 kl. 04:24
kilden bruker

stemmer
0

Jeg går med Jacob Relkin svar. Denne veiledningen gir en trinn-for-trinn prosedyre for å bruke CoreLocation i en iPhone-app. Håper dette hjelper deg.

Beste ønsker.

Svarte 14/03/2010 kl. 05:17
kilden bruker

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