2016-09-12 35 views
1

我有一個MKMapView,我需要顯示兩種類型的覆蓋。一種是平鋪覆蓋圖,我使用MKOverlayViewMKCircleRenderer的子類。使用viewForOverlay返回一個MKOverlayView,但我也需要返回一個MKCircleRenderer在同一個方法

我的方法是: - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay但現在我還需要渲染MKCircle我得到的編譯器錯誤: 「不兼容的指針類型返回'從結果類型的函數‘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'而不是覆蓋視圖嗎?然後你可以實現'rendererForOverlay'而不是'viewForOverlay'然後你可以從一個方法返回兩個渲染器。 – Rob

+0

偉大的幫助!謝謝@Rob!我只是將我的'TileOverlayView'作爲'MKOverlayRenderer'的一個子類,它的效果非常好!如果你想提交作爲答案,我可以接受它:) – LeanneGamble

回答

0

的問題是,瓷磚觀點顯然是從MKOverlayView(由viewForOverlay返回)繼承,而MKCircleRenderer子從更現代MKCircleRenderer的,的MKOverlayRenderer一個子類(由rendererForOverlay返回),不MKOverlayView

我建議你可以使你的瓷磚查看一個MKOverlayRenderer子類而不是覆蓋視圖。這樣,而不是viewForOverlay,您可以實現rendererForOverlay並返回圓形渲染器或圖塊渲染器。

相關問題