2010-04-07 19 views
6

KullanıcıKimliği'yi haritada göstermek ve aynı zamanda kullanıcının konumunu kaydetmek istiyorsanız, userLocation.location öğesine bir gözlemci eklemek ve konumları kaydetmek iyi bir fikirdir. Kullanıcı konumunu kaydetmek için hala CLLocationManager kullanıyorum ve kullanıcının mevcut yerini (mavi gösterge) göstermek için mapView.showUserLocation'ı kullanabilir miyim? MapKit API'si tarafından desteklenen varsayılan mavi göstergeyi göstermek istiyorum. i MKMapView zamanda kullanıcının mevcut konumunu almak için CLLocationManager kullanır düşünüyorum kaputun altındaiPhone Geliştirme - CLLocationManager ve MapKit

- (void)viewDidLoad { 
    ... 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = DISTANCE_FILTER_VALUE; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 

    myMapView.showUserLocation = YES; 
    [myMapView addObserver:self forKeyPath:@"userLocation.location" options:0 context:nil]; 

    ... 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    // Record the location information 
    // ... 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%s begins.", __FUNCTION__); 

    // Make sure that the location returned has the desired accuracy 
    if (newLocation.horizontalAccuracy <= manager.desiredAccuracy) 
     return; 

    // Record the location information 
    // ... 
} 

:

Ayrıca burada bir kaba örnek kod var? Yani, bu herhangi bir sorun yaratacaktır çünkü hem CLLocationManager hem de MapView aynı konum servislerini kullanmaya çalışacaklarına inanıyorum? Herhangi bir çatışma ve doğru/gerekli veya güncel verilerin eksikliği olacak mı?

cevap

1

Bkz. SO entry: CLLocationManager, tüm örneklerinde aynı verileri kullanır, böylece çakışma olmaz.

+1

Ancak showUserLocation öğesini TRUE olarak ayarlar ve özel sınıfımızda bir CLLocationManager oluşturursak, esasen MKMapView tarafından kullanılan ve özel sınıfınızda bir tane olmak üzere iki tane CLLocationManager örneği oluştururuz. Yer güncellemelerini kim alacak? UserLocation.location veya didUpdateLocation: delegate yöntemi gözlemcisi? Her ikisinde de yerlere kayıt yapmaya başlarsam kaydedilen yerler senkronize olur mu? – Mustafa

+2

Görünüşe göre, birden fazla Konum Yöneticisine sahip olabilirsiniz ve size doğru bilgileri verir. MapKit ayrıca CLLocationManager'ı kaputun altında kullanmasına rağmen, bir CLLocationManager oluşturmak ve bunu MapKit ile kullanmak herhangi bir çakışma oluşturmaz. – Mustafa

İlgili konular