У меня есть карта с аннотациями, где я выполнить следующие действия:Проверьте, пользователь выбрал другую аннотацию на карте
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view{
[self methodA];}
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
[self methodB];}
Оба метода A и B удалить или добавить мнение в mapView.superview.
Все работает отлично, имея дело с одной аннотацией. Проблема в том, что у меня есть несколько аннотаций, и я выбираю два, один за другим.
Если я нахожусь в другом месте на карте, все работает нормально. Но когда я нажимаю во втором аннотационном представлении после первого, он выполняет «didDeselectAnnotationView», а затем «didSelectAnnotationView», который вызывает оба метода A и B, и это не то, что я хочу. Я хотел бы, чтобы он обнаружил, что я нажимаю в другой аннотации и игнорирую оба метода.
Я исследовал об этом, но пока не нашел решения.
Я попытался добавить глобальную переменную и играть с ним, а также определить, когда пользователь прикасается:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
// Get the specific point that was touched
CGPoint point = [touch locationInView:self.mapView];
for (id<MKAnnotation> annotation in self.mapView.annotations) {
MKAnnotationView* anView = [self.mapView viewForAnnotation: annotation];
if (anView){
CGRect frame = CGRectMake(anView.frame.origin.x-5, anView.frame.origin.y-5, anView.frame.size.width+5, anView.frame.size.height+5);
if (CGRectContainsPoint(frame, point)) {
NSLog(@"BELONGS");
}
}
}}
Однако это не поймать все штрихи плюс это будет немного спагетти.
Любые идеи, как это решить?
Все лучшее
Возможно похожи: http://stackoverflow.com/questions/23667606/detect-when-a-second-annotation-is-selected-in- a-mkmapview – Anna
В принятом ответе используется [self performSelector: @selector (checkShouldHideBottomView :) withObject: view afterDelay: 0.5]; Я считаю, что это не соответствующая вещь. – jonypz