Проблема с перекрытием аннотациями (MKAnnotationView) на карте

голоса
9

В моем iPhone приложения, я использую MapKit с MKMapView и пользовательских MKAnnotationView.

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

Я не нашел способ отправить событие в передней аннотацию. Я не могу поверить, что это ошибка / проблема не имеет решения!

Z упорядочение и Порядок перекрытия аннотаций вопросов по StackOverflow не помогла мне , что много.

Пожалуйста, любая идея приветствуется (даже грязные решения)!

Вот некоторые из моего кода (ничего особенного, очень распространено):

CustomAnnotation.h

@interface CustomAnnotation : NSObject <MKAnnotation> {
   @private
   CustomAnnotationView* view;
}

    @property (nonatomic, retain) CustomAnnotationView* view;

@end

CustomAnnotation.m

@implementation CustomAnnotation

@synthetize view;

CustomAnnotationView.h

@interface CustomAnnotationView : MKAnnotationView {
}

@end

CustomAnnotationView.m

@implementation CustomAnnotationView

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
// Do something related to the annotation tapped
}

@end

Основной класс ... // складывают Аннотации и некоторые из них пересекаются с другими.

- (void)addAnnotation:(CustomAnnotation*)annotation {
    [map addAnnotation:annotation];
}

...

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    NSString* identifier = getIdentifierFromAnnotation(annotation);
    CustomAnnotationView* view;
    if(!(view = (CustomAnnotationView*)[map dequeueReusableAnnotationViewWithIdentifier:identifier])) {
        view = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier: identifier];
        [(CustomAnnotation*)annotation setView:view];
        [view release];
    }
    return view;
}
Задан 18/03/2010 в 16:07
источник пользователем
На других языках...                            


4 ответов

голоса
2

И, наконец, лучший способ я нашел, и что позволяет избежать потери карты funcionalities заключается в следующем:

  • пусть сенсорную слушателя на CustomAnnotationView (touchesEnded) (на каждой аннотации)

  • при получении сенсорного события, передать событие в основной класс

  • Основной класс петля на аннотацию и сохраняет аннотацию, которая имеет хорошее расположение (сенсорное событие в аннотаций кадре), и что находится перед

Она работает довольно хорошо.

Ответил 22/04/2010 в 12:04
источник пользователем

голоса
0

Я добавил UITapGestureRecognizer к представлению на фронте и решить проблему для меня.

В вашем случае, добавив жест распознаватель в CustomAnnotationView должно решить проблему.

Ответил 15/12/2011 в 15:04
источник пользователем

голоса
0

Вслед за ответ Александр, я отключил все мои пользовательские объекты с MKAnnotationViews

annView.enabled = NO

так что они не реагируют на поведение выбора MKMapView по умолчанию, и реализованы в моем обычае MKAnnotationView следующего:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 self.enabled = YES;
 [(MKMapView*)self.superview selectAnnotation:self.annotation animated:NO];
}

Это решение отлично работает на прошивке 4. Похоже, Отключение MKAnnotationView не отключает его userInteractionEnabled, в то время как на прошивке 3 он делает. Все еще ищу решение для прошивки 3 ...

EDIT : на самом деле, это , кажется, ошибка в прошивкой 4.1. В прошивкой 4.2, отключение булавки также отключает сенсорные события. Поэтому этот метод работает только для 4.1 и , возможно , 4.0.

Ответил 21/10/2010 в 06:47
источник пользователем

голоса
0

См решение этого вопроса . В основном вы будете создавать прозрачный UIView , который будет перехватывать все штрихи. Я не пробовал, но это может быть больше проблем , чем это стоит , если у вас есть переопределять все функциональные возможности пинч-на-зум в MKMapView.

Если у вас есть два (или более) MKAnnotations совместно расположены вы можете повторно нажать для переключения между ними. Это должно работать без каких-либо изменений в приложение.

Ответил 21/04/2010 в 15:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more