본문 바로가기
프로그래밍/iOS

맵뷰 핀 클릭시 이미지 비동기로 불러오기

by 백룡화검 2012. 2. 7.



위 스크린샷과 같이 이미지를 각 핀마다 다르게 보여주고 싶은 경우가 있다.

이때 모든 핀 이미지를 로드하게 되면 터치되어 보이지도 않는 이미지를 로드하게되어

비효율적이다.

더군다나 맵 뷰 로드시 이미지를 불러오게 되면 멀티쓰레드를 사용하지 않는 이상

메인 쓰레드가 멈추게 되어 당분간 아무런 터치에도 반응하지 않게 된다.

(핀이 많은 경우에는 각각의 이미지를 불러오므로 엄청나게 긴 시간동안 터치에 반응하지 않는다.)


-(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;


이 marker.image 에 이미지 뷰를 주면 된다.