2010-08-23 4 views
1

그래서 CLLocationManager를 작성하여 업데이트를 시작하고 mapView.showsUserLocation을 YES로 설정하고 userLocation 주석에 대해 nil을 반환했습니다. 여기 내 UIMapViewController에 내 코드에서 일부 조각입니다 :showsUserLocation은 iPhone 4.0에서 파란색 점을 표시하지 않습니다.

- (void)viewDidLoad 
{ 
    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    [locationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
CLLocationCoordinate2D userCoordinate = locationManager.location.coordinate; 
[map setCenterCoordinate:userCoordinate animated:YES]; 
[map setShowsUserLocation:YES]; 
} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

MKAnnotationView *mapIconView = (MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:@"mapIconView"]; 

// Don't mess with the user location annotation 
    if (annotation == mapView.userLocation) 
       return nil; 

    // etc. 
}  

이 모두 매우 간단 보인다. 모든 것이 잘 작동합니다.지도는 필연적으로 내 위치를 확대하고, 모든 메소드가 예상대로 호출되지만 파란색 점이 없음을 확인했습니다. 내 인생에 대한 푸른 점을 얻을 수 없다. 내가 몇 번이나 말을하든간에

mapView.setUserLocation = YES; 

무엇이 여기에 실종되어 있습니까? 나는이 작업을 수행 할 때

답변

1

, 오히려 당신이 가지고있는 것처럼 annotation을 확인하는 것보다, 내가의 라인을 따라 뭔가를 할 :

if([annotation class] == MKUserLocation.class) { 
    return nil; 
} 
+0

감사합니다.하지만 아무 것도 바뀌지 않는 것 같습니다. 아직 점이 없습니다. 코드를 단계별로 살펴보고 {return nil; } 전화가 오면 문제가 있다고 생각하지 않습니다. – Aeonaut

+0

이것은 매우 좋은 지적입니다. 지도보기의 userLocation은 처음에는 nil이므로 주석을 mapView.userLocation과 비교하는 대신 주석의 클래스를 확인하는 것이 좋습니다. – spstanley

1

그것의 mapView.showUserLocation = YES;

'표시'대신 '설정'을 잘못 사용한 것 같습니다.

그리고 참고로 사용자 위치를 얻기 위해 위치 관리자를 사용하지 않아도됩니다. mapview.showUserLoction = YES을 설정하고지도를로드하면 Corelocation이 자동으로 실행됩니다.

은 도움이 :)

+4

그는 속성의 setter 메서드를 사용하여 값을 설정합니다.이 값은 완벽하게 유효합니다. 정확히 "mapView.showUserLocation = YES;"를 수행합니다. Obj-C 2.0 덕분입니다! – spstanley

0

당신이 다음 파란색 점을 볼 수 없습니다, 아이폰 OS 시뮬레이터를 사용하는 경우 바랍니다. 나는 똑같은 문제가 있었고 실제 하드웨어로 소프트웨어를 시험해보기 시작했을 때 파란 점이 나타났습니다!

+0

시뮬레이터에서 맵보기의 사용자 위치는 "실제"위치 (인터넷 주소에 의해 결정됨, btw)에 관계없이 항상 N 19º 19.901, W 122º 01.827로 설정되기 때문입니다. – spstanley

+0

예, 알고 있습니다. 시뮬레이터에서 테스트 중이라면 실제로 파란색 점이있는 현재 위치를 실제로 볼 수 없다고 말하고 싶습니다. 공습 경보 해제? – Krismutt

1

파란색 점이 나타나지 않는 동일한 문제가 발생했습니다. 내가 그것이 그것이라고 생각했던 곳이 아니라 단지 그것이 나타나고 있다고 밝혀진다.

내 문제와 마찬가지로 코드는 위치 업데이트를 처리하고 MKMapView가 사용자 위치를 추적하도록 요청하는 것처럼 보입니다. 시뮬레이터에는 두 개의 다른 위치가 있습니다. MKMapView가 시뮬레이터에서 사용자 위치를 추적 할 때 "실제"위치에 상관없이 캘리포니아 주 쿠퍼 티노에있는 Apple의 위치를 ​​제공합니다.

이 코드를 사용하고 MKMapView가 대리자의 위치를 ​​추적시키는 대신의 위치가 자신이 파란색 점을 밝힐 수 추적 :

- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    [theMapView setCenterCoordinate:userLocation.location.coordinate animated:YES]; 
} 

당신은 아마 조금 확대 할 수 있습니다.

예 : Set the Zoom Level of an MKMapView

+0

맞습니다. 시뮬레이터 코어 위치에서 실제 위치는 (IP 주소 등을 기준으로) 실제 위치를 사용하지만 MapKit은 현재 위치로 Cupertino, CA를 사용합니다. 핵심 위치 위치를 중심으로지도를 그릴 경우 북 캘리포니아를 축소 해 보지 않는 한 파란색 점이 표시되지 않습니다. 그것은 잘 장치에서 작동합니다. –

1

당신이 어디서든 맵에서 모든 주석을 제거하지 않습니다 있는지 확인하십시오 : 나는 그렇게이 블로그 항목에서 편리 코드를 사용 [mapView removeAnnotations : mapView.annotations]

관련 문제