2013-11-13 3 views
3

Я пытаюсь изменить цвет местоположения пользователя, как это сделано в приложении «найти моих друзей» от Apple (см. Прилагаемый скриншот).Настроить оттенок местоположения пользователя на iOS [Обновлено]

Обратите внимание, что я использую MapBox SDK, и я в настоящее время имею следующий метод:

- (RMMapLayer *)mapView:(RMMapView *)mapView layerForAnnotation:(RMAnnotation *)annotation 
{ 
    if (annotation.isUserLocationAnnotation) 
     return nil; 
} 

Я также посмотрел в this thread, чтобы иметь представление о том, как я должен делать что-то подобное, но не сделал найдите тот же код для местоположения пользователя. Использовала ли Apple статичное изображение PNG для поиска друзей? Я потеряю адаптивный круг вокруг позиции, изменив его на другой цвет (если это возможно)?

UPDATE

Как @Incanus сказал в своем ответе на мой -[RMMapViewDelegate mapView:layerForAnnotation:] метод обратного вызова, я должен получить три вызова, соответствующие isUserLocationAnnotation = YES - дот, точность круг, и пульсирующий ореол. Я получаю только один, и я не понимаю почему.

Кроме того, я пытался настроить аннотацию при смене режима слежения, вот что я сделал:

if (self.mMapView.userTrackingMode == RMUserTrackingModeNone) 
{ 
    for (RMAnnotation *annotation in self.mMapView.annotations) { 
     if (annotation.isUserLocationAnnotation) { 

      if ([annotation.annotationType isEqualToString:@"RMAccuracyCircleAnnotation"]) { 

       [(RMCircle*)annotation.layer setFillColor:[[UIColor redColor] colorWithAlphaComponent:0.6]]; 
       [(RMCircle*)annotation.layer removeAllAnimations]; 
      } 

     } 
    } 

    [self enableBouncingOnLayer:self.mMapView.userLocation.layer]; 
} 
else 
{ 
    [self.mMapView.userLocation.layer removeAnimationForKey:@"animateScale"]; 
} 

До сих пор так хорошо, я получаю синий точность круг краснеть и остановить изменение размера. Проблема в том, что платформа MapBox все равно обновит ее, так что она вернется к нормальному состоянию.

Что интересно, используя этот метод, у меня есть 3 аннотации с isUserLocationAnnotation, установленным в YES, но я получаю только один обратный вызов.

Любая помощь приветствуется.

Find my friends app screenshot

+0

см. Это http://stackoverflow.com/questions/6293432/how-to-change-mkmapviews-user-location-blue-dot-to-an-image-of-choice – karthika

+0

Это называется «аннотация» и вы можете изменить его из свойства 'pinColor'. –

+1

Sanjeet Suhag: Как я могу получить доступ к свойству pinColor? MapBox предоставляет мне объект RMAnnotation, которому не хватает этого свойства.Karthika: Вы полагаете, что я не могу изменить цвет и что мне нужно использовать картинку вместо этого? – user2700551

ответ

0

Для MapBox SDK, вы можете получить доступ к фактической синей точкой внутри пучка ресурсов и создать подкрашенную версию, либо на лету с Core Graphics или опережает время, как другой ресурс в вашей связке.

В разделе «Найти друзей» точка по-прежнему синяя - на самом деле они просто используют измененную копию для других аннотаций. Вы можете сделать то же самое.

Вы также можете быть заинтересованы в https://github.com/0xced/UIKit-Artwork-Extractor специально для перетягивания ресурсов из приложения Find My Friends, которая на самом деле то, что мы использовали в рамках MapKit получить синюю точку для MapBox SDK ;-)

+0

Спасибо за этот ответ. Чтобы быть более точным из-за моей потребности, я нахожусь в положении пользователя, чтобы оставаться синим, и всякий раз, когда он находится в определенной области (опасная зона, вулканическая или какая-либо другая), я хочу превратить цвет круга в красный (наряду с радиусом вокруг него). Есть ли решение для изменения изображения динамически для этой цели, и есть ли у вас примеры кода для этого? – user2700551

+0

У меня нет подходящих примеров кода, но в вашем обратном вызове '- [RMMapViewDelegate mapView: layerForAnnotation:]' вы фактически получите три вызова, соответствующие 'isUserLocationAnnotation = YES' - точка, круг точности и пульсирующий ореол. Вы можете вернуть пользовательский слой для каждого из них. Посмотрите в источник 'RMMapView', как создаются оригиналы (включая анимации) в качестве отправной точки. – incanus

+0

Да, я изменил метод layerForAnnotation, чтобы заменить изображение на создание. Проблема в том, что я хочу иметь возможность обновлять ее после этого, так как этот метод вызывается только один раз. Что я делаю, так это то, что я просматриваю MapView.nnotes, проверяя, что текущая аннотация является аннотацией пользователя, а затем заменяет annotation.layer моим новым маркером, но это приводит к сбою при обновлении halo с помощью setRadiusInMeters (когда я изменил слой) , Есть ли способ изменить его, когда он уже находится на экране? – user2700551

0

As Incanus указал на это, я использую метод layerForAnnotation: для настройки аннотации пользователя. Затем я создал этот метод, чтобы принудительно обновить слой, чтобы его можно было снова нарисовать.

- (void)refreshUserAnnotation { 

    [mUserAnnotation setLayer: [self mapView:mMapView layerForAnnotation:mUserAnnotation]]; 

} 
1

В Swift 3,

mapView.tintColor = .red 

Удивительным прямо вперед в настоящее время.

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