위 스크린샷과 같이 이미지를 각 핀마다 다르게 보여주고 싶은 경우가 있다.
이때 모든 핀 이미지를 로드하게 되면 터치되어 보이지도 않는 이미지를 로드하게되어
비효율적이다.
더군다나 맵 뷰 로드시 이미지를 불러오게 되면 멀티쓰레드를 사용하지 않는 이상
메인 쓰레드가 멈추게 되어 당분간 아무런 터치에도 반응하지 않게 된다.
(핀이 많은 경우에는 각각의 이미지를 불러오므로 엄청나게 긴 시간동안 터치에 반응하지 않는다.)
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
이미지를 넣는 방법은 위 메소드가 호출될때 MKPinAnnotationView 객체를 만들어
pin.image 에 이미지 뷰를 주면 된다.
이 메서드는 맵뷰가 로드될때 호출되므로 맵뷰가 느리게 뜨게 되는것이다
해결책은 핀을 클릭했을때 해당 이미지만 가져오는 것이다.
아래 메서드는 pin 이 터치됬을때 호출되는 메서드 이다.
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
view 파라미터로부터 터치된 MKPinAnnotaionView 핀객체를 얻는다.
MKPinAnnotationView *dropPin = (MKPinAnnotationView *)view;
MyMarker *marker = (MyMarker *)dropPin.annotation;
'프로그래밍 > iOS' 카테고리의 다른 글
페이스북 담벼락과 연동되는 아이폰 앱 만들기 (2) | 2012.02.07 |
---|---|
전국 광역시도 위도 경도 delta 값 (0) | 2012.02.07 |
MKMapview의 주석(Annotation)을 통해 상세뷰로 넘어 갈때, 인덱스 값 찾기. (0) | 2012.02.06 |
동기적으로 동작하는 UIAlertView (Custom UIAlertView) (0) | 2012.02.05 |
커스텀 Action Sheet 사용하기 (0) | 2012.02.04 |