簡體   English   中英

無法在地圖上顯示MKPolyline

[英]Cannot display MKPolyline on the map

我正在用折斷折線的方法來戰斗……

我仍然無法在地圖上顯示它!

我實現了:

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存儲庫中使用的那些點。首先,我嘗試使用這些類,但也無法顯示折線…)

然后我做(就像這里 ):

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];設置了我的代表,但是我也嘗試添加[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

哈哈開個玩笑!

實際上, MKOverlayPathViewlineWidth默認設置為0…

(檢查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 :)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM