Jak sledovat polohu uživatele s MapKit

hlasů
10

Já používám MapKit pro zobrazení polohy ve vztahu uživatele k kolíky kolem nich. Rád bych, aby bylo možné napodobit funkčnost, která Maps poskytuje prostřednictvím tlačítka nitkovým v levém dolním rohu obrazovky. Už jsem si vědom, že MapKit poskytuje objekt CLLocation s polohou uživatele přes MKUserLocation, jen jsem chtěl požádat o radu o tom, jak mám držet důraz na tomto místě. Moje první sklon bylo použít NSTimer k vycentrování mapy na které koordinují každých 500ms nebo tak nějak.

Existuje lepší způsob, jak to udělat? Je tam něco, vestavěné v MapKit, že mi chybí, že se toho dosáhnout?

Díky moc, Brendan

Položena 14/03/2010 v 02:09
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
39

Pokud jste na iOS5 + To je velmi jednoduché. Stačí změnit „userTrackingMode“ pomocí kódu, jako jsou:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

To bude plynule sledovat uživatelům aktuální polohu. Pokud přetáhnete mapy bude i nastavení režimu sledování zpět ke MKUserTrackingModeNonekteré je obvykle chování chcete.

Odpovězeno 20/04/2013 v 10:40
zdroj uživatelem

hlasů
12

Je to opravdu jednoduché, aby se mapa aktualizuje uživatelskou umístění automaticky stejně jako Google Maps. Jednoduše nastavte showsUserLocation na YES

self.mapView.showsUserLocation = YES

... a pak implementovat MKMapViewDelegate vycentrujete mapy při aktualizaci umístění.

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

A umožnit uživateli přiblížit a posouvat, aniž by ukradl pohled na aktuální umístění ...

-(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];
}
Odpovězeno 01/09/2010 v 02:42
zdroj uživatelem

hlasů
7

Myslím, že bych vlastně používat CoreLocation CLLocationManagera používat svou metodu delegáta locationManager:didUpdateToLocation:fromLocation:.

Tímto způsobem, nemusíte režii NSTimera aktualizuje pouze tehdy, když je tu nové místo k dispozici.

Můžete vytáhnout zeměpisné šířky a délky od CLLocationobjektu zaslané locationManager:didUpdateToLocation:fromLocation:metodou a předat jej k zobrazení mapy.

Odpovězeno 14/03/2010 v 05:24
zdroj uživatelem

hlasů
0

Chodím s Jacoba Relkin je odpověď. Tento výukový program poskytuje krok za krokem postup při použití CoreLocation v iPhone app. Doufám, že to pomůže.

Vše nejlepší.

Odpovězeno 14/03/2010 v 06:17
zdroj uživatelem

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