2010-02-03 6 views
26

나는 프로그래밍 MKPinAnnotationView에 대한 콜 아웃을 열고 자. 예를 들어지도에 10 개의 핀을 떨어 뜨리고 나에게 가장 가까운 핀을 열어보기를 원합니다. 이 일을 어떻게 하죠?MKAnnotationView를 프로그래밍 방식으로 호출하는 방법? (아이폰, MapKit)

애플은 (이 작동하지 않습니다, 그것을 시도) MKAnnotationView's에 대한 '선택'매개 변수를 지정했지만 직접 설정하는 것을 권장하지. 나머지 MKAnnotationView를 들어

만 setHighlighted (같은 이야기)을 가지고 있으며, 수 ShowCallout 방법 ...이 모든 가능한 경우

어떤 힌트? 그런 다음 현재 위치와 배열에서 사용할 수있는 주석을 걸어를 기반으로 가장 가까운 주석을 확인할 수 있습니다

- (void)openAnnotation:(id)annotation 
{ 
    //mv is the mapView 
    [mv selectAnnotation:annotation animated:YES]; 

} 

: 당신의 mapViewController에서

답변

76

는 액션 메소드를 만듭니다. 가장 가까운 주석이 계산되면

[mv annotations]; 

, 전화 :

[self openAnnotation:closestAnnotation]; 

맵뷰 MapView는 표시 영역의 중앙에 주석을 배치 자동으로 스크롤합니다. 빠른 3에서

+0

오타를 수정하여 주셔서 감사합니다. –

+0

그게 멋진 친구 .. –

+1

당신이 프로그래밍 방식으로지도보기의 가시 영역이'[MV annotationsInMapRect : mv.visibleMapRect]를 사용할 수있을 것 선택하려는 주석을 알고 있다면'. 대규모지도 주석 세트를 사용하는 경우 성능이 한 단계 향상됩니다. –

1

이가에 업데이트됩니다

func openAnnotation(annotation: MkAnnotation) { 
_ = [mapView .selectAnnotation(annotation, animated: true)] 
} 

하고 주석을 사용하여 호출 할 수 있습니다 (이 주석 콜 아웃 뷰를 열고지도에 주석을 중심으로 시도합니다) 예를 들어

가상의 주석 목록에서 두 번째 주석을 사용합니다.

openAnnotation(annotation: mapView.annotations[1]) 
+0

코드는 ObjC (대괄호)와 Swift의 이상한 조합입니다. 배열을 만들어 버린 이유는 무엇입니까? –

관련 문제