Использование 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
и вернуть либо средство визуализации круга, либо средство рендеринга плитки.