Problem mit überlappenden Annotationen (MKAnnotationView) auf der Karte

9

In meiner iPhone-Anwendung verwende ich MapKit mit MKMapView und benutzerdefinierten MKAnnotationView.

Das Problem ist, wenn sich Anmerkungen in der Karte überschneiden (in meiner App sind Anmerkungen Fotos und diese können sich überlappen) und wenn Sie auf die Anmerkung auf der Vorderseite tippen, ist es eine weitere Anmerkung (auf der Rückseite), die das Ereignis empfängt (scheint zufällig sein).

Ich habe keine Möglichkeit gefunden, das Ereignis an die Frontanmerkung zu senden. Ich kann nicht glauben, dass dieser Bug / dieses Problem keine Lösung hat!

Z-Bestellung und Reihenfolge der überlappenden Anmerkungen Fragen auf Stackoverflow hat mir nicht viel geholfen.

Bitte jede Idee ist willkommen (auch schmutzige Lösungen)!

Hier ist ein Teil meines Codes (nichts Besonderes, sehr häufig):

CustomAnnotation.h

%Vor%

CustomAnnotation.m

%Vor%

CustomAnnotationView.h

%Vor%

CustomAnnotationView.m

%Vor%

Hauptklasse     ... // Anmerkungen werden hinzugefügt und einige überschneiden sich mit anderen.

%Vor%     
Alexandre Gellibert 18.03.2010, 15:07
quelle

4 Antworten

2

Schließlich ist der beste Weg, den ich gefunden habe und der das Vermeiden von Kartenfunktionen vermeidet:

  • Lassen Sie den Touch-Listener auf CustomAnnotationView (touchesEnded) (bei jeder Anmerkung)

  • tippen
  • Wenn Sie ein Berührungsereignis erhalten, übertragen Sie das Ereignis in die Hauptklasse

  • main-Klasse führt Schleifen auf Annotationen durch und behält die Annotation bei, die eine gute Position hat (Touch-Ereignis im Annotation-Frame) und die sich vorne befindet

Es funktioniert ziemlich gut.

    
Alexandre Gellibert 22.04.2010, 11:04
quelle
0

Siehe die Lösung für diese Frage . Im Grunde erstellen Sie eine transparente UIView, die alle Berührungen abfängt. Ich habe es nicht ausprobiert, aber das kann mehr Probleme bereiten, als es sich lohnt, wenn Sie alle Pinch-Zoom-Funktionen in MKMapView neu implementieren müssen.

Wenn Sie zwei (oder mehr) MKAnnotations co-lokalisiert haben, können Sie mehrmals tippen, um zwischen den beiden zu wechseln. Das sollte ohne Änderungen an Ihrer App funktionieren.

    
smountcastle 21.04.2010 14:04
quelle
0

Im Anschluss an Alexandres Antwort habe ich alle meine benutzerdefinierten MKAnnotationViews-Objekte mit

deaktiviert %Vor%

, so dass sie nicht auf das MKMapView-Standardauswahlverhalten reagieren und in meiner benutzerdefinierten MKAnnotationView Folgendes implementiert haben:

%Vor%

Diese Lösung funktioniert hervorragend unter iOS 4. Es scheint, als würde die Deaktivierung eines MKAnnotationView dessen userInteractionEnabled nicht deaktivieren, während dies bei iOS 3 der Fall ist. Ich suche immer noch nach einer Lösung für iOS 3 ...

BEARBEITEN : Eigentlich scheint dies ein Fehler in iOS 4.1 zu sein. In iOS 4.2 deaktiviert das Deaktivieren eines Pins auch die Berührungsereignisse. Daher funktioniert diese Methode nur für 4.1 und möglicherweise 4.0.

    
samvermette 21.10.2010 05:47
quelle
0

Ich habe den UITapGestureRecognizer zu der Ansicht an der Vorderseite hinzugefügt, und das hat das Problem für mich gelöst.

In Ihrem Fall sollte das Hinzufügen eines Gestenerkenners zu CustomAnnotationView das Problem lösen.

    
g_fred 15.12.2011 14:04
quelle