Маркер Google Maps iOS не удаляется

Я использую маркер для отображения местоположения пользователей в моем приложении iOS. У меня это работает прямо сейчас, но когда пользователь перемещается, он добавляет дополнительные маркеры и не удаляет старый. Я не могу использовать mapview clear, потому что это очищает все мои маркеры, и есть другие маркеры, которые я не хочу удалять в сцене. Я приложу код ниже. Спасибо

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];


        mapIcon = @"largemapicon";

       GMSMarker *myMarker;


        CLLocationCoordinate2D coordi=location.coordinate;
        myMarker = nil;
        myMarker=[GMSMarker markerWithPosition:coordi];
       // marker.snippet = coordinates[@"name"];
        myMarker.map = self.mapView;
        myMarker.appearAnimation = kGMSMarkerAnimationPop;

        UIImage * image = [UIImage imageNamed:mapIcon];
        CGSize sacleSize = CGSizeMake(45, 45);
        UIGraphicsBeginImageContextWithOptions(sacleSize, NO, 0.0);
        [image drawInRect:CGRectMake(0, 0, sacleSize.width, sacleSize.height)];
        UIImage * resizedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        myMarker.icon = resizedImage;
        NSLog(@"movement");

    }

2 ответа

Решение

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

myMarker.map  = nil;

вместо

myMarker = nil;

Обязательно переместите объявление переменной (GMSMarker *myMarker;) из этого метода, а также. Вам нужно, чтобы он сохранился от одного звонка observeValueForKeyPath к следующему (когда местоположение пользователя обновляется).

Почему вы используете маркер, чтобы показать местоположение пользователя? Просто включите местоположение пользователя и используйте традиционную синюю точку.

Другие вопросы по тегам