Я использую MKDirectionsRequest, чтобы найти MKRoute между двумя точками. Ответ будет отображаться в MKMapView с помощью этого кода:
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error)
{
if (error)
{
NSLog(@"Error : %@", error);
}
else
{
[_mapView removeOverlays:_mapView.overlays];
for (MKRoute *route in response.routes)
{
[_mapView insertOverlay:route.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
}
}
}];
Мой вопрос: если есть правильный способ обновления MKRoute, если пользователь движется. Atm Я использую
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation
чтобы распознать движение, и в этом методе я удаляю наложение MKRoute и вычисляю и добавляю новое с новым местоположением пользователя. Мне интересно, есть ли способ вычислить маршрут только один раз и обновить оверлей программно?
Edit: Я нашел этот https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep в Apples Dev Docs. Думаю, мне нужно сделать что-то вроде
for (MKRoute *route in response.routes)
{
for (MKRouteStep *step in route.steps)
{
[_mapView insertOverlay:step.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
}
}
но как я могу узнать, какие шаги находятся за фактическим местоположением пользователя?
Изменить: Другим вариантом может быть использование таймера, запускающего событие (удаление старого наложения и добавление нового). Как вы думаете?
[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(addRouteOverlay) userInfo:nil repeats:YES];