Probleem met overlappende annotaties (MKAnnotationView) kaart

stemmen
9

In mijn iPhone applicatie, ik gebruik MapKit met MKMapView en aangepaste MKAnnotationView.

Het probleem is wanneer annotaties overlappen op de kaart (in mijn app, annotaties zijn foto's en die foto's kunnen overlappen) en wanneer u tikt op de annotatie die aan de voorzijde verschijnt, is een andere annotatie (op de rug), die de gebeurtenis ontvangt (lijkt te zijn willekeurig ).

Ik heb geen manier om het evenement te sturen naar de voorkant annotatie niet vinden. Ik kan niet geloven dat deze bug / probleem geen oplossing te hebben!

Z bestellen en Orde van overlappende annotaties vragen over StackOverflow hielpen me niet zo veel.

Gelieve enig idee is welkom (zelfs vies oplossingen)!

Hier zijn een paar van mijn code (niets bijzonders, zeer vaak):

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

Hoofdklasse ... // Aantekeningen worden toegevoegd en een aantal van hen overlapt met anderen.

- (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;
}
De vraag is gesteld op 18/03/2010 om 16:07
bron van user
In andere talen...                            


4 antwoorden

stemmen
2

Ten slotte is de beste manier die ik vond en dat voorkomt verliezen kaart funcionalities is om:

  • laat de aanraking luisteraar mee op CustomAnnotationView (touchesEnded) (op elke aantekening)

  • bij het ontvangen van aanraking evenement, dragen het evenement hoofdklasse

  • hoofdklasse lussen aan aantekeningen en houdt de melding dat een goede locatie (aanraakmanifestatie in de annotatie kader) heeft en die tegenover

Het werkt vrij goed.

antwoordde op 22/04/2010 om 12:04
bron van user

stemmen
0

Ik heb de UITapGestureRecognizer om van het uitzicht aan de voorzijde toegevoegd en dat het probleem opgelost voor mij.

In uw geval, het toevoegen van een gebaar herkenner om CustomAnnotationView zou het probleem moeten oplossen.

antwoordde op 15/12/2011 om 15:04
bron van user

stemmen
0

In aansluiting op het antwoord van Alexandre, ik uitgeschakeld Al mijn aangepaste MKAnnotationViews objecten met

annView.enabled = NO

zodat ze niet reageren op de MKMapView default select gedrag, en in mijn aangepaste geïmplementeerd MKAnnotationView het volgende:

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

Deze oplossing werkt geweldig op iOS 4. Het lijkt alsof het uitschakelen van een MKAnnotationView heeft haar userInteractionEnabled niet uit te schakelen, terwijl op iOS 3 het doet. Nog steeds op zoek naar een oplossing voor iOS 3 ...

EDIT : eigenlijk, lijkt dit een bug in iOS 4.1. In IOS 4.2, uitschakelen een pen schakelt ook aanraakgebeurtenissen. Daarom is deze methode werkt alleen voor 4.1 en eventueel 4.0.

antwoordde op 21/10/2010 om 06:47
bron van user

stemmen
0

Zie de oplossing voor dit vraagstuk . In principe vindt u een transparante UIView waarin alle accenten zullen onderscheppen creëren. Ik heb niet geprobeerd, maar dit kan meer problemen dan het waard zijn als je alle van de pinch-to-zoom-functionaliteit in MKMapView herimplementeren.

Als u twee (of meer) MKAnnotations co-locatie kunt u tik herhaaldelijk op om te schakelen tussen de twee. Dat zou moeten werken zonder enige wijzigingen in uw app.

antwoordde op 21/04/2010 om 15:04
bron van user

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