Использование viewForOverlay для возврата MKOverlayView, но мне также нужно вернуть MKCircleRenderer в том же методе

У меня есть MKMapView что мне нужно отобразить два типа наложения на. Одним из них является мозаичное наложение, которое я использую подкласс MKOverlayView и MKCircleRenderer,

Мой метод:- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay но теперь мне нужно также сделать MKCircle Я получаю сообщение об ошибке компилятора: "Несовместимые типы указателей, возвращающие" MKCircleRenderer * "из функции с типом результата" MKOverlayView * _Nonnull ".

- (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 устарела, над которой я работаю как еще одна проблема.

1 ответ

Решение

Проблема в том, что вид плитки, очевидно, является подклассом MKOverlayView (возвращается viewForOverlay), в то время как MKCircleRenderer подклассы из более современных MKCircleRendererподкласс MKOverlayRenderer (возвращается rendererForOverlay), а не из MKOverlayView,

Я бы посоветовал вам сделать так, чтобы MKOverlayRenderer подкласс, а не наложение. Таким образом, а не viewForOverlayВы можете реализовать rendererForOverlay и вернуть либо средство визуализации круга, либо средство рендеринга плитки.

Другие вопросы по тегам