6

지도에 userLocation을 표시하고 동시에 사용자의 위치를 ​​기록하려는 경우 observer를 userLocation.location에 추가하고 위치를 기록하는 것이 좋습니다. 나는 여전히 사용자 위치를 기록하고 mapView.showUserLocation을 사용하여 사용자의 현재 위치 (파란색 표시기)를 표시하기 위해 CLLocationManager를 사용합니까? MapKit API가 지원하는 기본 파란색 표시기를 보여주고 싶습니다. 나는 MKMapView는 사용자의 현재 위치를 얻기 위해 CLLocationManager를 사용하여 생각, 후드iPhone 개발 - CLLocationManager와 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 
    // ... 
} 

:

또한, 여기에 거친 샘플 코드입니까? 그래서, CLLocationManager와 MapView가 같은 위치 서비스를 사용하려고 시도하기 때문에 이것이 어떤 문제를 일으킬 것입니까? 정확한/요구되거나 현재의 데이터가 충돌하거나 부족할 것입니까?

답변

1

다음을 참조하십시오. SO entry : CLLocationManager는 모든 인스턴스에서 동일한 데이터를 사용하므로 충돌이 없습니다.

+1

showUserLocation을 TRUE로 설정하고 사용자 지정 클래스에 CLLocationManager를 만들면 기본적으로 CLLocationManager의 두 인스턴스 (MKMapView에서 사용되는 인스턴스와 사용자 지정 클래스에서 하나)가 만들어집니다. 누가 위치 업데이트를받을 수 있습니까? observer on userLocation.location 또는 didUpdateLocation : delegate 메서드? 두 위치에서 위치 기록을 시작하면 기록 된 위치가 동기화됩니까? – Mustafa

+2

분명히 여러 위치 관리자를 가질 수 있으며 정확한 정보를 제공합니다. MapKit은 CLLocationManager도 사용하지만 CLLocationManager를 만들고 MapKit과 함께 사용하면 충돌이 발생하지 않습니다. – Mustafa