2012-04-23 1 views
0

내 모든지도 핀에 대해 사용자 지정 MKPinAnnotationView를 만들었지 만 사용자 위치 핀을 사용자 지정하는 데 문제가 있습니다. 커스텀 핀을 만들면 파란 점을 잃어 버리고 핀으로 바뀌므로 원하지 않습니다. 그래서 viewForAnnotation 방법에 전무를 반환 :MapKit 사용자 위치에 대한 사용자 정의 콜 아웃보기를 만들려면 어떻게해야합니까?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
    if(annotation == self.mapView.userLocation) 
    { 
     // show the blue dot for user's GPS location 
     return nil; 
    } 

    ... code for custom annotation pins goes here 
} 

그러나, 나는 그것이 내가 그것을 탭 사용자 정의 콜 아웃 뷰를 호출 할 않습니다. 파란색 점이 선택되었을 때 나는 하위 뷰를 추가하는 시도했다 :

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{  
    if(view == [self.mapView viewForAnnotation:self.mapView.userLocation]) 
    { 
     MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation]; 

     userLocationCalloutView = [[MyAnnotationCalloutView alloc] initWithFrame:CGRectMake(-113, -58, 247, 59)]; 
     [userLocationCalloutView.rightAccessoryButton addTarget:self action:@selector(pinButtonTapped) forControlEvents:UIControlEventTouchDown]; 
     [userLocationView addSubview:userLocationCalloutView]; 
    } 
} 

그러나이 문제는 콜 아웃 액세서리 버튼 히트 영역의 밖에 있다는 것입니다, 그리고 나는 그러나 hitTest를 추가 할 수 없습니다 : withEvent 때문에 파란색 점 주석보기는 비공개입니다 ... 어떤 아이디어입니까?

답변

2

할 수 있습니다 대리자 방법지도보기에서 userLocation 주석의 내장 MKAnnotationView를 얻을 : didAddAnnotationViews :

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    for(MKAnnotationView *view in views) 
    { 
     if (view.annotation == mapView.userLocation) 
     { 
      view.canShowCallout = YES; 
      view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      break; 
     } 
    } 
}