2014-02-03 2 views
0

Я просто следовал за этим учебник того нарисовать маршрут на картах в прошивке 7 http://www.techotopia.com/index.php/Using_MKDirections_to_get_iOS_7_Map_Directions_and_RoutesАльтернативные маршруты на MKDirections

Это здорово, но я не могу найти, как сделать альтернативные маршруты на другой цвете, и менять цвета при Я касаюсь каждого маршрута. С помощью этого кода все маршруты рисуются одним и тем же цветом:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay 
{ 
     MKPolylineRenderer *renderer = 
      [[MKPolylineRenderer alloc] initWithOverlay:overlay]; 
     renderer.strokeColor = [UIColor blueColor]; 
     renderer.lineWidth = 5.0; 
     return renderer; 
} 

Любые идеи? Спасибо за консультацию

+0

Вы должны потратить некоторое время, чтобы понять, что делает этот пример. Это очень просто и легко, и нетрудно достичь того, чего вы хотите – JustSid

+0

Если я не понимаю, это не совсем «просто и просто». Использование другого цвета для каждого маршрута можно сделать, установив каждый субтитр полилинии (который, как представляется, не использует MKDirections), на некоторый «цветовой код», а затем установил цвет на основе этого значения в rendererForOverlay. – Anna

+0

Обнаружение касания по маршруту сложнее. [Этот ответ] (http://stackoverflow.com/a/20425540/467105) by @Jensemann хорошо работает. Изменение цвета после касания маршрута может быть выполнено путем удаления этого наложения, изменения его «цветового кода», а затем добавления наложения назад. – Anna

ответ

2

Вот некоторые «простые и легкие» способы сделать то, что вы описали:

  1. «Как нарисовать альтернативные маршруты на другой цвет»: С MKDirections Безразлично» t, похоже, использует свойство subtitle создаваемых накладок, вы можете набить «цветовой код» там перед добавлением наложения, а затем в rendererForOverlay, установить цвет полилинии на основе его subtitle.

    Однако, поскольку @matt прокомментировал и ответил, лучший подход заключается в подклассе MKPolyline и создании явного свойства color.

  2. «Прикосновение к каждому маршруту»: Обнаружение касания по маршруту сложнее. This answer by @Jensemann хорошо работает.
  3. «Изменить цвет, когда я прикасаюсь каждый маршрут»: Изменение цвета, как только маршрут касания может быть сделан путем удаления этого наложения, изменяя его «код цвета», а затем добавить наложения обратно. Другим вариантом здесь является создание пользовательского представления наложения (рендеринга в iOS 7), цвет которого может быть динамически изменен.
+1

В iOS 7, к сожалению, нет «оверлейного вида». Но вы можете создать настраиваемый объект наложения, соответствующий MKOverlay, и настраиваемый визуализатор наложения, и это совсем не сложно. Этот проект содержит пример этого: https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/bk2ch21p744maps/ch34p1008maps – matt

3

Предупреждение: Я не пробовал это; Я просто печатаю его прямо на странице здесь, не запуская его, что я редко делаю. Так что это может не сработать.

Что я предлагаю - это подкласс MKPolyline, обладающий свойством цвета. Когда я хочу добавить полилинию в качестве наложения на карту, основанную на сегменте направления, я бы создавал экземпляр этого подкласса и придавал ему цвет. Это сложно, но я думаю, что это может быть сделано:

MKPolyline* poly = route.polyline; 
MyColoredPolyline* poly2 = 
    [MyColoredPolyline polylineWithPoints:poly.points count:poly.pointCount]; 
poly2.color = // whatever 
[self.map addOverlay:poly2]; 

Позже, визуализатор может принести этот цвет и использовать его, чтобы установить цвет штриха MKPolylineRenderer в.

if ([overlay isKindOfClass:[MyColoredPolyline class]]) { 
    v = [[MKPolylineRenderer alloc] initWithPolyline:(MKPolyline*)overlay]; 
    v.strokeColor = ((MyColoredPolyline*)overlay).color; 
+0

Имейте в виду, что этот код может быть ошибочным, так как я его не запускал. – matt

+0

Спасибо, Мэтт, это работает, как ожидалось, без проблем. Хорошая мысль – StuartM

Смежные вопросы