Hoe kan ik locatie van de gebruiker met MapKit volgen

stemmen
10

Ik gebruik MapKit de locatie van de gebruiker ten opzichte van pinnen om hen heen weer te geven. Ik zou graag in staat zijn om de functionaliteit die Maps biedt via de crosshair knop in de linker bovenhoek van het scherm na te bootsen. Ik ben al op de hoogte dat MapKit biedt een CLLocation object met de locatie van de gebruiker via MKUserLocation, ik wilde alleen maar advies over hoe ik me concentreren op die locatie moet blijven zoeken. Mijn eerste neiging was om een ​​NSTimer gebruiken om de kaart te centreren op dat elke 500ms of zo te coördineren.

Is er een betere manier om dit te doen? Is er iets ingebouwd om MapKit dat ik mis dat zal dit te bereiken?

Thanks so much, Brendan

De vraag is gesteld op 14/03/2010 om 02:09
bron van user
In andere talen...                            


4 antwoorden

stemmen
39

Als je op IOS5 + dit is zeer eenvoudig. Verander enkel de "userTrackingMode" gebruik van de code, zoals:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Dit zal soepel volgen de gebruikers huidige locatie. Als u de kaart sleept zal het nog zet de tracking mode terug naar MKUserTrackingModeNonewat meestal het gedrag dat u wilt.

antwoordde op 20/04/2013 om 10:40
bron van user

stemmen
12

Het is heel eenvoudig om de kaart te actualiseren van de locatie van de gebruiker automatisch net als de google maps. Eenvoudigweg showsUserLocation op JA

self.mapView.showsUserLocation = YES

... en vervolgens de uitvoering van de MKMapViewDelegate om opnieuw het centrum van de kaart wanneer de locatie wordt bijgewerkt.

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

En om de gebruiker te zoomen & pannen zonder het stelen van de weergave terug naar de huidige locatie ...

-(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];
}
antwoordde op 01/09/2010 om 02:42
bron van user

stemmen
7

Ik denk dat ik eigenlijk de CoreLocation zou gebruiken CLLocationManageren gebruik maken van haar afgevaardigde methode locationManager:didUpdateToLocation:fromLocation:.

Op deze manier hoeft u niet de overhead van een NSTimer, en het werkt alleen als er een nieuwe locatie beschikbaar is.

U kunt de lengte- en breedtegraad trekken van het CLLocationobject naar de locationManager:didUpdateToLocation:fromLocation:werkwijze en doorgeven aan de kaartweergave.

antwoordde op 14/03/2010 om 05:24
bron van user

stemmen
0

Ik ga met het antwoord van Jacob Relkin's. Deze handleiding biedt een stap-voor-stap procedure van het gebruiken van CoreLocation in een iPhone app. Hoop dat dit helpt u.

Al het beste.

antwoordde op 14/03/2010 om 06:17
bron van user

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