0

我正在与这些该死的折线作斗争......</p>

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

我实现了:

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];

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

然后我做(像这里):

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];

先验,它应该可以工作,因为MKPolylineView继承自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
4

1 回答 1

0

哈哈开什么玩笑!

其实lineWidthofMKOverlayPathView默认设置为0……</p>

(检查MKOverlayPathView 类参考

一开始我以为是问题,但不是……重要的是要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 :)。

于 2013-05-17T08:01:03.743 回答