Подтвердить что ты не робот

Пользовательский просмотр аннотации для пользователя, не перемещающего mapview

Можно ли создать пользовательский аннотация для текущего местоположения пользователей в iOS?

Мне нужно удалить синюю точку (с кругами) со своим собственным пользовательским представлением (скажем, пинг). Можно ли сделать это?

Если это так, то этот вывод перемещается в новое место, когда есть изменения в местоположении пользователя? Или нам нужно обращаться с ним программно?

Я заметил, что если мы используем голубую точку по умолчанию для текущего местоположения пользователя, то она будет обновляться на карте при изменении местоположения пользователя.

Я просто хочу знать, можно ли это сделать с нашим собственным пользовательским представлением.

4b9b3361

Ответ 1

Да, у вас может быть пользовательское представление для местоположения пользователя.

К сожалению, это сложнее реализовать, чем должно быть, потому что хотя документация для метода делегата viewForAnnotation утверждает, что вы можете просто предоставить свои собственные если класс аннотации MKUserLocation, пользовательский вид не будет продолжать перемещаться с местоположением пользователя. Фактически, когда пользовательское представление возвращается для MKUserLocation, вид карты перестает полностью обновлять местоположение пользователя (метод делегата map didUpdateUserLocation больше не срабатывает). Я считаю, что это ошибка.

Обходной путь заключается в использовании CLLocationManager и пользовательской аннотации...


Убедитесь, что showsUserLocation имеет значение NO или не установлен на карте.

Объявить свойства для CLLocationManager и пользовательскую аннотацию с использованием настраиваемого класса, реализующего протокол MKAnnotation (или вы можете просто использовать общий класс MKPointAnnotation).

В viewDidLoad или в другом подходящем месте создайте CLLocationManager, установите его delegate и вызовите startUpdatingLocation.

В диспетчер местоположений didUpdateToLocation метод делегирования (а не метод делегата map didUpdateUserLocation), создайте или обновите пользовательскую аннотацию:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (myUserLocAnnot == nil)
    {
        self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease];
          //remove the autorelease if using ARC
        myUserLocAnnot.title = @"You are here";
        myUserLocAnnot.coordinate = newLocation.coordinate;
        [mapView addAnnotation:myUserLocAnnot];
    }
    else
    {
        myUserLocAnnot.coordinate = newLocation.coordinate;
    }
}

Наконец, в методе делегата map viewForAnnotation делегат вы должны вернуть пользовательский аннотационный вид, если аннотация является вашей пользовательской аннотацией пользователя.