【问题标题】:Cannot display MKPolyline on the map无法在地图上显示 MKPolyline
【发布时间】:2013-05-11 09:51:30
【问题描述】:

我正在与这些该死的折线作斗争......

我仍然无法在我的地图上显示它!

我实现了:

NSArray *points = [NSArray arrayWithObjects:
                   [[CLLocation alloc] initWithLatitude:45.43894 longitude:-73.7396],
                   [[CLLocation alloc] initWithLatitude:45.44073 longitude:-73.73998],
                   // 72 more like that…
                   nil];

( 请注意,这些点是在github 上的NVPolyline 存储库中使用的点。 首先我尝试使用这些类,但我也无法显示折线......)

然后我做(比如here):

int numPoints = [points count];
CLLocationCoordinate2D *arrayPtr = malloc(numPoints * sizeof(CLLocationCoordinate2D));

for(int i = 0; i<numPoints; i++) {
    arrayPtr[i] = [[points objectAtIndex:i] coordinate];
}

polyline = [MKPolyline polylineWithCoordinates:arrayPtr count:numPoints];

[map addOverlay:polyline];

我也尝试了,而不是添加折线覆盖:

MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:polyline];
[map addSubview:polylineView];

先验,它应该可以工作,因为MKPolylineViewinherit from UIView,但它崩溃了。

这是日志:

-[CALayer levelsOfDetail]: unrecognized selector sent to instance 0x1d8319e0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer levelsOfDetail]: unrecognized selector sent to instance 0x1d8319e0'

我已经通过情节提要设置了我的委托,但我也尝试添加 [map setDelegate:self]; 但没有任何变化。

我在哪里以及为什么错了?

感谢您的帮助和想法。

编辑,添加:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < MKOverlay >)overlay
{
    if ([overlay isKindOfClass:[MKPolyline class]])
    {
         MKOverlayView *pView = [[MKOverlayView alloc] initWithOverlay:overlay];
         return pView;
    }

    return nil;
}

还是不行,我就傻了。

我还向您展示了我的 .h :(对我来说似乎是正确的)

@interface MapViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate>
{
    MKPolyline *polyline;
}

@property (weak, nonatomic) IBOutlet MKMapView *map;

@end

【问题讨论】:

  • 你有崩溃日志吗?
  • 您查看过 Apple 的 breadcrumb example 吗?它用于在地图视图上跟踪用户路径。您可以根据需要对其进行修改。
  • 是的,我已经看过了,但我只得到了蓝点,仅此而已。我只能访问信息按钮。该应用程序仅此而已。很奇怪。
  • 您是否正确实现了viewForOverlay 方法?我们可以看看吗?
  • MKMapView 添加折线后,地图实例会调用它的委托(您的viewController)来询问如何显示此折线。见stackoverflow.com/questions/10598322/…

标签: ios objective-c mkmapview mapkit mkpolyline


【解决方案1】:

哈哈,开什么玩笑!

其实MKOverlayPathViewlineWidth默认设置为0……

(查看MKOverlayPathView class reference)

一开始我以为是问题,但不是……重要的事情是设置strokeColor

因为我的[map addSubview:polylineView]; 使我的应用程序崩溃(我不明白为什么),我必须改用[map addOverlay:polyline];

所以我补充说:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    MKPolylineView *thePolylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
    thePolylineView.strokeColor = [UIColor purpleColor]; // <-- So important stuff here
    thePolylineView.lineWidth = 5.0;
    return thePolylineView;
}

感谢您的帮助@Kirualex :)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多