【问题标题】:MKPolyline not being displayed in map viewMKPolyline 未显示在地图视图中
【发布时间】:2016-04-28 17:17:06
【问题描述】:

我正在开发一个简单的 iOS 应用程序,该应用程序从服务器检索 GeoJSON 并将其显示在地图视图上。除了最后一部分,一切都在工作。我检索 GeoJSON,对其进行解析以创建 MKPolyline,将线提供给我的视图(这是地图的委托),然后将线添加到我的 mapView,但它没有显示。我对可能出现的问题一无所知。

我有一个从服务器检索数据的networking 类,我的视图控制器是它的代表。它接收这样的行:

-(void) receiveRoutePolyline:(MKPolyline *)routeLine {
    NSLog(@"Received line");
    NSLog(@"%@", self.mapView.delegate);
    NSLog(@"%@", self);
    self.routeLine = routeLine;
    if (self.routeLine == nil) {
        NSLog(@"Nil duh!");
    }
    NSLog(@"%lu", (unsigned long)[self.routeLine pointCount]);
    [self.mapView addOverlay:self.routeLine level:MKOverlayLevelAboveLabels];
    NSLog(@"Set line on map");
}

如您所见,我一直在打印信息以查找任何错误。这是函数的输出:

2016-04-28 12:09:40.472 SinTraficoRouteAPIDemo[43189:1400965] Received line
2016-04-28 12:09:40.473 SinTraficoRouteAPIDemo[43189:1400965] <MapViewController: 0x78f37a90>
2016-04-28 12:09:40.474 SinTraficoRouteAPIDemo[43189:1400965] <MapViewController: 0x78f37a90>
2016-04-28 12:09:40.475 SinTraficoRouteAPIDemo[43189:1400965] 121
2016-04-28 12:09:40.475 SinTraficoRouteAPIDemo[43189:1400965] Set line on map

视图控制器被正确设置为mapView的delegate,但是渲染的方法:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    NSLog(@"hi");
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolyline *route = overlay;
        MKPolylineRenderer *routeRenderer = [[MKPolylineRenderer alloc] initWithPolyline:route];
        routeRenderer.strokeColor = [UIColor blueColor];
        routeRenderer.lineWidth = 10;
        return routeRenderer;
    }
    else {
        return nil;
    }
}

永远不要将“hi”记录到控制台!我什至尝试添加不推荐使用的方法

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
    polylineView.strokeColor = [UIColor redColor];
    polylineView.lineWidth = 10;
    return polylineView;
}

看看它是否可行,但没有运气。任何帮助表示赞赏,谢谢。

编辑: 查看控制器声明

@interface MapViewController : UIViewController <MKMapViewDelegate, OptionsDelegate, RouteNetworkDelegate>

【问题讨论】:

  • 你声明了 MKMapViewDelegate 吗?
  • @TejaNandamuri 是的,我在帖子中添加了声明。
  • mapview 是在 storyboard 中创建的吗?如果是这样,请在情节提要中也设置委托。
  • 它是在情节提要中创建的。我也刚刚在那里添加了代表,但该行仍未显示。 @TejaNandamuri
  • 在 if (self.routeLine == nil) 处设置断点并尝试打印 routeLine 的描述,看看你得到了什么

标签: ios objective-c mkmapview mkpolyline


【解决方案1】:

这段代码运行良好。这条线被正确地绘制在地图上,问题是解析坐标并创建这条线的代码。它正在将纬度和经度向后设置,因此这条线在世界其他地方,在我的缩放级别下是不可见的。

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多