MKMapView не обновляет оверлей правильно, задержка при показе MKPolyline - PullRequest
0 голосов
/ 17 марта 2012

Проблема в том, что когда я добавляю полилинию к 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];

Единственная проблема заключается в том, что задержка, с которой ломаная рисуется на карте, является случайной.

1 Ответ

0 голосов
/ 18 марта 2012

Решение, которое решило мою проблему - позвонить по номеру

setTheRoutePoints

функция в главном потоке.

Это устранило задержку, с которой была показана полилиния.

[self performSelectorOnMainThread:@selector(setRoutePoints:) withObject:steps waitUntilDone:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...