2011-10-24 3 views
2

MKAnnotationView를 서브 클래스 화하여 커스텀 어노테이션 뷰를 생성했습니다. 이 클래스는 또한 내 앱과 일치하도록 스킨 된 맞춤 설명 선 (정보 팝업 '버블')보기를 만듭니다.MKUserLocation 파란색 점에 사용 된 MKAnnotationView를 서브 클래스화할 수 있습니까?

또한 사용자 위치 도트에 대한 설명 선 거품을 다시 찍을 수 있기를 원하지만, 그보기를 통해 제어 할 수있는 유일한 방법은 마치 mapView:viewForAnnotation: 내부에서 다음을 사용하여 완전히 재정의되었는지 여부입니다. 방법 :

if(annotation == self.mapView.userLocation) 
    { 
     return nil; 
    } 

하지만 정말 그렇게 나는 그것의 선 거품을 피부 수 주석보기 MapKit는 사용자의 위치에 파란색 점을 사용하고있는 것을 알 수있다 수행 한 다음 하위 클래스 싶어 ... 또는 원하는 거기에 또 다른입니다 방법? 아니면 절대 안돼?

감사합니다 :)

: - 조

답변

0

내가이 당신을 도울 것입니다 확실하지 오전

if ([annotation isKindOfClass:[MKUserLocation class]]) { // or if(annotation == self.mapView.userLocation) 
    MKAnnotationView * annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MyLocation"]; 
    if (annotationView == nil) { 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyLocation"] autorelease]; 
     annotationView.canShowCallout = NO; 
     annotationView.image = [UIImage imageNamedWithBrand:@"MyLocationPin.png"]; 
     } else { 
     annotationView.annotation = annotation; 
     } 
    return annotationView; 
} 
+0

작동하지 않습니다, 그것은 이미지 "MyLocationPin.png"푸른 점을 대체하기 때문이다. 나는 파란색 점으로 annotationView를 서브 클래스화할 수 있기를 원하기 때문에 사용자 정의 콜 아웃을 추가 할 수 있습니다 ... 죄송합니다. – jowie

+0

죄송합니다. 질문을 잘 이해하지 못했습니다. 글쎄 ... 나는 당신의 문제에 대해 생각할 것이다. :) – Zoleas

+0

thanks :) 내가 다시 말 할 수 있는지 보겠다 ... 충분히 명확하지 않으면 편집 해 주시기 바랍니다! – jowie

1

사용할 수 있지만 다음 도용, 기본 사용자 위치 주석보기를 사용할 수 있습니다 mapView:didSelectAnnotationView:에서보기 :

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    if (view == [mapView viewForAnnotation:mapView.userLocation]) { 
     // do what you want to 'view' 
     // ... 
    } 
    // ... 
} 

이 난을 변경하려면이 트릭을 사용했다 설명 문 제목 및 부제목을 입력하고 leftCalloutAccessoryView을 사용하여 이미지를 추가하십시오. 그러나 이 콜 아웃을 완전히 바꾸려고 시도하지 않았으므로 가능한지 모르겠습니다.

+0

그게 영리한 생각이고 나는 그것을 풀어 줬지만, 유일한 문제는 userLocation annotationView를 멈추는 방법으로 보이지 않는다는 것이다. 이견있는 사람? – jowie

+1

'mapView : didAddAnnotationViews :'에서 주석보기를 가져와야합니다. 거기에서, 당신은'if' 문에서 위와 같은 테스트를 사용할 수 있고'canShowCallout'을 거기에서'NO'로 설정할 수 있습니다. – shawkinaw

+0

정말 대단한 감사입니다! 거의 거기에 ... 나는 객체의 클래스가 MKUserLocationView라는 것을 알았다. MKUserLocationView를 확장하거나 서브 클래 싱하여 새로운 버블을 그리는 방법이 있습니까? 아니면 직접 뷰 컨트롤러에 코드를 작성해야합니까? – jowie