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%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)
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.
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.
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.
Tags und Links objective-c iphone mkmapview mapkit mkannotation