【问题标题】:MKMapView not updating overlay correctly, delay on showing MKPolylineMKMapView 没有正确更新覆盖,延迟显示 MKPolyline
【发布时间】:2012-03-18 04:19:33
【问题描述】:

问题是当我向 MapView 添加折线时...折线显示随机延迟。有时需要 1 秒有时需要 5 秒

这是绘制折线的函数。

- (void) setRoutePoints:(NSArray*)locations {
    CLLocationCoordinate2D *pointsCoOrds = (CLLocationCoordinate2D*)malloc(sizeof(CLLocationCoordinate2D) * [locations count]);
    NSUInteger i, count = [locations count];
    for (i = 0; i < count; i++) {
        CLLocation* obj = [locations objectAtIndex:i];
        pointsCoOrds[i] = CLLocationCoordinate2DMake(obj.coordinate.latitude, obj.coordinate.longitude);
    }

    [mapView addOverlay:[MKPolyline polylineWithCoordinates:pointsCoOrds count:locations.count]];
    free(pointsCoOrds);
}

所需的回调函数(参见 Apple Docs)也是正确的

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay {
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView* routeLineView = [[MKPolylineView alloc] initWithPolyline:overlay];
        routeLineView.fillColor = [UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:0.5f];
        routeLineView.strokeColor = [UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:0.5f];
        routeLineView.lineWidth = 8;
        return routeLineView;
    }
    return nil;
}

这就是我调用函数来添加折线的方式

[self setRoutePoints:steps];

唯一的问题是在地图上绘制折线的延迟是随机的。

【问题讨论】:

    标签: cocoa mkmapview


    【解决方案1】:

    解决我的问题的解决方案是调用

    setTheRoutePoints
    

    主线程上的函数。

    这消除了显示折线的延迟。

    [self performSelectorOnMainThread:@selector(setRoutePoints:) withObject:steps waitUntilDone:NO];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2019-11-30
      相关资源
      最近更新 更多