2010-12-03 5 views
2

핀 주석 대신 맞춤 주석을 추가하고 있습니다. 기본적으로 이러한 주석에 원을 그려지도에 추가합니다. 이 문제는 이러한 사용자 지정 주석으로 인해 사용자 위치보기 (파란색 점)가 흐려집니다. 파란색 점이 앞으로 어떻게 오게됩니까?MKMapView : MKUserLocationView (파란색 점)를 앞에 가져 오는 방법은 무엇입니까?

- (void)mapView:(MKMapView *)mapView 
didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
UIView *user = [mapView viewForAnnotation:userLocation]; 
[mapView bringSubviewToFront:user]; 
} 

그러나 이것은 나를 위해 작동하지 않습니다. 파란색 사용자 점은 여전히 ​​내 맞춤 주석으로 덮여 있습니다. 사용자 위치보기를 표시하려면 어떻게해야합니까? 건배

답변

0

일반적으로 뒤쪽에 userLocation보기가 있어야합니다. 최소한 핀이있는 mapView의 정상적인 동작입니다.

정말로 앞에 가져 오려면 실제 userLocation보기를 찾아야합니다. 나는 [mapView viewForAnnotation:userLocation]이 실제 userLocation 뷰를 제공하지 않는다고 믿는다 (당신은 그것이 nil이 아닌지 확인 했는가?). 나는이처럼 MKMapViewDelegate-mapView:didAddAnnotationViews:를 추가 :

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    for (id view in views) { 
     if (![view isKindOfClass:[YourCustomAnnotationView class]]) { 
      self.userLocationView = view; 
     } 
    } 
} 
0

Ortwin의 대답은 나를 위해 작동하지 않았다. MKUserLocationView는 적어도 내 테스트에서는 그 배열에 없다.

대신 MKMapView 인스턴스에서 직접 값을 가져옵니다. 그래서 같이 :이 코드를 실행하면, 현재 위치보기 이미

 
MKAnnotationView *userLocationAnnotationView; 
@property (nonatomic, retain) MKAnnotationView *userLocationAnnotationView; 

을 추가해야합니다 :

 

if (self.userLocationAnnotationView != nil && self.mapView.userLocation != nil) { 
    self.userLocationAnnotationView = [self.mapView viewForAnnotation:self.mapView.userLocation]; 
} 
 

"userLocationAnnotationView"나는 내보기 컨트롤러에있는 바르이다. 다음과 같은 다양한 이유로 viewDidLoad에는 해당되지 않을 수 있습니다. a) 아직 GPS 업데이트가 없습니다. b) 현재 위치가 화면에서 벗어납니다. 다음 코드를 실행합니다.

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

행운을 비네!

5

이 시도, 그것은 작동 :

MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation]; 
[userLocationView.superview bringSubviewToFront:userLocationView]; 
2

나는이처럼 수행 :

- (void) mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views { 
    for (MKAnnotationView *view in views) { 
     if ([[view annotation] isKindOfClass:[MKUserLocation class]]) { 
      [[view superview] bringSubviewToFront:view]; 
     } else { 
      [[view superview] sendSubviewToBack:view]; 
     } 
    } 
} 
관련 문제