2012-06-23 2 views
0

두 개의 다른 오버레이로 MKMapView를 만들고 싶습니다.대리자 함수에서 여러 MKOverlays를 처리하는 방법

먼저 "지도에 이미지 오버레이"(TileOverlay), 이 있고 두 번째로지도에 오버레이로 경로를 그립니다. 나는 두 개의 서로 다른 프로젝트 (이미지 오버레이 하나, 및 경로 오버레이 다른) 이제

이 물건을 할 경우

다, 나는 viewForOverlay 위임 기능이있는 경우 같이 방법을 궁금 잘 작동 I 내 프로젝트를 병합 하시겠습니까? 내 이미지에 대한

는 타일 오버레이는 내가 현재 다음과 같습니다

내 경로 오버레이
- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{  
    TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay]; 
    tileView.tileAlpha = 1.0; 
    return tileView; 
} 

은 다음과 같습니다 : 지금은이 ("병합"할 경우

- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{ 
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay]; 
    polylineView.lineJoin = kCGLineJoinRound; 
    polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4]; 
    return polylineView; 
} 

하나의 프로젝트로),이 방법은 어떻게 생겼을 까?

- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{ 
    //what comes here? 
} 

답변

4

먼저이처럼 mapView:viewForOverlay: 메서드에 전달 오버레이의 유형을 확인하여 이러한 상황을 처리 할 수 ​​:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { 

    if ([overlay isKindOfClass:[MKPolyline class]]) { 

     MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay]; 
     polylineView.lineJoin = kCGLineJoinRound; 
     polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4]; 
     return polylineView; 

    } else { 

     TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay]; 
     tileView.tileAlpha = 1.0; 
     return tileView; 
    } 
+0

확인, 감사합니다,하지만 난 후 무엇을 반환합니까? 두 오버레이가 포함 된 MKOverlayView를 반환해야합니까? 아니면 그냥 polylineView를 반환해야합니까? KindOfClass MKPolyline이고 tileView가 isKindOfClass tileView 인 경우 tileView를 반환해야합니까? – Kito

+0

좋아, 나는 그것을 곧 시도 할 것이다. 대단히 감사합니다. D – Kito

관련 문제