2015-03-13 4 views
1

У меня есть приложение, которое использует Route-me со статическими картами (плитки, хранящиеся в базе данных sqlite). Код ниже правильно добавляет маршрут к карте. Однако я хотел бы, чтобы приложение удалило указанный маршрут и добавило еще один маршрут. В коде, функция получает новый набор точек маршрута (переменная PathNodes) в этой строке (кнопка [маршрут createRoute: whichRoute] метод вытягивает точки данных из SQLite базы данных - это работает правильно):Route-me: размещение нового маршрута на карте

pathNodes = [route createRoute:whichRoute]; 

Тогда я удалить существующий слой в этом коде:

// remove the current layer, which holds the previous route 
    if (currentLayer != nil) { 
     [mapView.contents.overlay removeSublayer:currentLayer]; 
    } 

и добавить новый слой в этом:

[mapView.contents.overlay addSublayer:(CALayer *)walkRoute.path]; 

Для первого маршрута, созданного, это работает отлично. Но когда выбран новый маршрут, существующий слой удаляется, а новый подуровень добавляется в mapView, но никогда не отображается.

Мне кажется, что это всего лишь вопрос о том, чтобы mapView перерисовывал себя с новым подуровнем, но я пробовал все, что мог придумать или обнаружить в другом месте, и ничего не сработало.

Как заставить mapView перерисовать себя. Или есть еще одна проблема, которую я не вижу?

Вся помощь будет принята с благодарностью!

- (void) setRoute { 
    NSMutableArray *pathNodes; 

    int whichRoute = delegate.selectedRoute; // delegate.whichRoute will be an integer denoting which route the user has chosen 

    Route *route = [[Route alloc] init];// Route stores information about the route, and a way to create the path nodes from a sqlite database 

    pathNodes = [route createRoute:whichRoute]; 
    CMRoute *walkRoute = [[CMRoute alloc] initWithNodes:pathNodes forMap:mapView]; 

    // remove the current layer, which holds the previous route 
    if (currentLayer != nil) { 
     [mapView.contents.overlay removeSublayer:currentLayer]; 
    } 

    [mapView.contents.overlay addSublayer:(CALayer *)walkRoute.path]; 
    currentLayer = (CALayer *)walkRoute.path; 

    // set the map's center point, whkch is the startPointlat and long stored in route 
    CLLocationCoordinate2D demoCoordinate; 
    demoCoordinate.longitude = route.startPoint.longitude; 
    demoCoordinate.latitude = route.startPoint.latitude; 

    [mapView setNeedsDisplay]; 
    [mapView moveToLatLong:demoCoordinate]; 
} 

ответ

1

В случае, если кто еще смотрит на это ...

Я никогда не получал карту RouteMe перерисовать маршрут, когда маршрут изменился. Однако - и это большое, однако - iOS 8 и 9 обладают всеми необходимыми возможностями для статических карт и рисования и повторного рисования маршрутов. И все это работает. Я переписал все приложение в Swift с помощью UIMapKit, и все работает намного лучше. Любой, кто думает об использовании RouteMe - я бы рекомендовал подумать дважды и три и четыре раза об этом. RouteMe не поддерживается и просто некорректен в некоторых ключевых областях. (Я один раз посмотрел на исходный код, чтобы узнать, что происходит, и нашел комментарии, что в классе есть какой-то унаследованный код, который никто не мог понять, почему он был там, но если его удалить, сломал класс.)

UIMapKit - это ответ.