2016-09-12 15 views
1

두 가지 오버레이 유형을 표시해야하는 MKMapView이 있습니다. 하나는 MKOverlayViewMKCircleRenderer 하위 클래스를 사용하는 바둑판 식 오버레이입니다. - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay하지만 지금 난의 컴파일러 오류 받고 있어요 또한 MKCircle 렌더링해야합니다 :viewForOverlay를 사용하여 MKOverlayView를 반환하지만 동일한 메서드에서 MKCircleRenderer를 반환해야합니다.

내 방법은 MKOverlayView * _Nonnull ''결과 유형으로 함수에서 'MKCircleRenderer *를 '반환 호환되지 않는 포인터 유형을 '. 내 코드입니다

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

    if ([overlay isKindOfClass:[MKCircle class]]) { 
     MKCircleRenderer *circleView = [[MKCircleRenderer alloc] initWithOverlay:overlay]; 
     circleView.strokeColor = [UIColor redColor]; 
     circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.4]; 
     return circleView; 
    } else { 
     TileOverlayView *view = [[TileOverlayView alloc] initWithOverlay:overlay]; 
     view.tileAlpha = 1.0; 
     return view; 
    } 
} 

, 나는 initWithOverlay 내가 또 다른 문제로 일하고 있어요되지 않습니다 것을 알고 있어요.

+0

타일 뷰를 오버레이 뷰가 아닌'MKOverlayRenderer' 뷰로 만들 수 있습니까? 그런 다음'viewForOverlay'보다는'rendererForOverlay'를 구현할 수 있습니다. 그러면 하나의 메소드에서 두 렌더러를 모두 반환 할 수 있습니다. – Rob

+0

큰 도움이됩니다! 고마워요 @!! 방금'TileOverlayView'를'MKOverlayRenderer'의 서브 클래스로 만들었습니다. 답변으로 제출하려면 받아 들일 수 있습니다 :) – LeanneGamble

답변

0

문제는 타일보기는 분명히 (rendererForOverlay에 의해 반환) MKOverlayRenderer의 서브 클래스가 아닌 MKOverlayView의 현대 MKCircleRenderer에서 MKCircleRenderer 서브 클래스 반면, (viewForOverlay에 의해 반환) MKOverlayView에서 서브 클래스된다는 것이다.

타일보기를 오버레이보기가 아닌 MKOverlayRenderer 하위 클래스로 만들 수 있습니다. 이렇게하면 viewForOverlay 대신 rendererForOverlay을 구현하고 원 렌더러 또는 타일 렌더러를 반환 할 수 있습니다.