iPhone - удалить аннотации пинов карты, но не моей

Я использую MapView и устанавливаю на нем аннотации (фиолетовые булавки) и мое местоположение пользователя (обведено синим кругом). Поскольку аннотации фиолетовых булавок будут перемещаться, мне придется удалить их и установить на карту новыми.

Я установил его с помощью:

CLLocationCoordinate2D coordinate;
coordinate.latitude = 49.2802;
coordinate.longitude = -123.1182;
NSUInteger count = 1;
for(int i = 0; i < 10; i++) {
    CGFloat latDelta = rand()*.035/RAND_MAX - .02;
    CGFloat longDelta = rand()*.03/RAND_MAX - .015;
    CLLocationCoordinate2D newCoord = {coordinate.latitude+latDelta, coordinate.longitude+longDelta};
    MyMapAnnotation* annotation = [[MyMapAnnotation alloc] initWithCoordinate:newCoord andID:count++];
    [mapView addAnnotation:annotation];
    [annotation release];
}

Перед этим я делаю

[mapView removeAnnotations:mapView.annotations];

но эта строка также удаляет мое местоположение с синей точкой! Как я мог сделать это, не удаляя свое местоположение.

Заранее большое спасибо и с наилучшими пожеланиями.


person Tim    schedule 14.01.2010    source источник


Ответы (1)


Очень простой способ сделать это — включить эту строку перед циклом, в котором вы удаляете аннотации:

    self.mapView.showsUserLocation = NO;

а затем после цикла верните местоположение пользователя в

    self.mapView.showsUserLocation = YES;

РЕДАКТИРОВАНИЕ: я только что увидел, что вы не перебираете местоположения, чтобы удалить их. Я не уверен, что это будет работать с тем, как вы это делаете.

person nevan king    schedule 14.01.2010
comment
Хм, как я могу сделать это лучше? Потому что я делаю: - (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id ‹MKAnnotation›)annotation { if (annotation == mapViewLocal.userLocation) { mapViewLocal.userLocation.title = @Test; mapViewLocal.userLocation.subtitle = @Test Sub; [mapViewLocal setRegion: MKCoordinateRegionMakeWithDistance (mapViewLocal.userLocation.coordinate, 3000, 3000) анимированный: НЕТ]; вернуть ноль; } ... Поэтому я всегда буду устанавливать свое местоположение в центре. И синяя точка не появляется. Мне нужно переместить MapView, тогда будет отображаться синяя точка. - person Tim; 14.01.2010
comment
Чтобы получить представление карты с аннотациями в центре, прокрутите их и найдите максимальную и минимальную широту и долготу, а затем установите диапазон и центр области, используя их. Если вы хотите включить местоположение пользователя в аннотации, убедитесь, что оно отображается с помощью метода, который я написал выше. MKMapView имеет свойство annotations, в котором хранятся все аннотации (включая местоположение пользователя). Если вы просто хотите центрировать карту по местоположению пользователя, используйте setCenterCoordinate:animated: - person nevan king; 14.01.2010
comment
Если вы можете сэкономить 5 долларов, это руководство действительно помогло мне понять представления карты: pragprog.com /screencasts/v-bdmapkit/using-map-kit - person nevan king; 14.01.2010
comment
Я реорганизовал свой код. Я создаю объекты аннотаций в цикле и добавляю их в NSMutableArray. И я использую метод удаления аннотаций, параметром которого является этот NSMuatable-Annotation-Array. Это прекрасно работает. - person Tim; 14.01.2010