Требуются: как надежно и последовательно выбрать аннотацию MKMapView

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;
getline(cin, names);//works on the \n left behind
getline(cin, names);//continues and rewrites names

его довольно самообучающийся, в потоке, который используется cin >> number, есть\n, который присваивается именам при первом использовании. Повторное использование getline теперь записывает правильное значение.

30
задан Juan Boero 23 December 2015 в 23:44
поделиться

4 ответа

Я столкнулся с той же проблемой, но нашел то, что кажется надежным и разумным решением:

  1. Реализуйте метод делегата mapView: didAddAnnotationViews :. Когда я попытался выбрать аннотацию непосредственно в методе делегата, выноска упала с булавкой! Это выглядело странно, поэтому я добавляю небольшую задержку в полсекунды.

     - (void) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) views {
     [self performSelector: @selector (selectInitialAnnotation) 
    withObject: nil afterDelay: 0.5]; { {1}}} 
     
  2. Выберите начальную аннотацию, как и следовало ожидать, но вызовите selectAnnotation: animated;

     - (void) selectInitialAnnotation {
     [self.mapView selectAnnotation: self .initialAnnotation animated: YES]; 
    } 
     

Кажется, что selectAnnotation: animated: не вызывается при некоторых условиях. Сравните с документами MKMapView :

Если указанная аннотация не отображается на экране и, следовательно, не имеет связанного представления аннотации, этот метод не имеет никакого эффекта.

36
ответ дан 27 November 2019 в 23:51
поделиться

У меня была похожая проблема, но я вообще не мог заставить этот метод работать, не говоря уже о непоследовательности.

Вот что мне удалось. Возможно, это сработает и для вас: Как запустить представление выноски MKAnnotationView, не касаясь булавки?

0
ответ дан 27 November 2019 в 23:51
поделиться

У меня сработал вызов selectAnnotation: animated: из mapView: didAddAnnotationViews: метод:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views;
{
    [mapView selectAnnotation:[[mapView annotations] lastObject] animated:YES];
}

Документация Apple по тому же здесь .

Обратите внимание, что у меня была только одна аннотация на карте, поэтому [[аннотации mapView] lastObject ] подходил для моих целей. Ваш пробег может отличаться.

4
ответ дан 27 November 2019 в 23:51
поделиться

У меня была аналогичная проблема. Я использовал MKPinAnnotationView по умолчанию с animatesDrop: YES. После того, как я добавил аннотации в MKMapView, я делал следующее:

[mapView selectAnnotation:[mapView.annotations objectAtIndex:1] animated:YES]

, который по логике моей программы должен выбирать ближайшую аннотацию. Это не сработало. Я выяснил причину: представление аннотации не было на экране во время этого вызова select из-за анимации падения булавки. Поэтому все, что я сделал, - это установил таймер, чтобы выбрать аннотацию через секунду. Это взлом, но он работает. Я не уверен, что это Я буду работать в любой ситуации, например, в сетях 3G и 3G. Было бы лучше найти правильную функцию обратного вызова, чтобы вставить ее.

selectTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self
               selector:@selector(selectClosestAnnotation) userInfo:nil
               repeats:NO];

- (void)selectClosestAnnotation {
    [mapView selectAnnotation:[mapView.annotations objectAtIndex:1]
             animated:YES];
}
2
ответ дан 27 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: