Ζήτημα με επικάλυψη σχόλια (MKAnnotationView) στο χάρτη

ψήφοι
9

Σε εφαρμογή iphone μου, είμαι με τη χρήση MapKit με MKMapView και προσαρμοσμένες MKAnnotationView.

Το πρόβλημα είναι όταν σχόλια επικαλύπτονται στο χάρτη (στο app μου, σχολιασμοί είναι φωτογραφίες και αυτές οι φωτογραφίες μπορούν να επικαλύπτονται) και όταν πατήσετε στο σχολιασμό που εμφανίζεται στο μπροστινό μέρος, αυτό είναι ένα άλλο σχολιασμό (στην πλάτη), η οποία λαμβάνει την εκδήλωση (φαίνεται να είναι τυχαία ).

Δεν βρήκα κανένα τρόπο να στείλετε το συμβάν στο μέτωπο σχολιασμό. Δεν μπορώ να πιστέψω αυτό το bug / πρόβλημα δεν έχει λύση!

Ζ παραγγελία και Τάξης του επικαλυπτόμενων σχολιασμούς ερωτήσεις σχετικά με 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

Σε συνέχεια της απάντησης Alexandre, έχω απενεργοποιήσει όλα τα προσαρμοσμένα MKAnnotationViews μου αντικείμενα με

annView.enabled = NO

έτσι ώστε να μην ανταποκρίνονται στην προεπιλεγμένη MKMapView επιλέξτε συμπεριφορά, και να εφαρμοστεί στην προσαρμοσμένη μου MKAnnotationView τα εξής:

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

Η λύση αυτή λειτουργεί μεγάλο για iOS 4. Φαίνεται πως η απενεργοποίηση ενός MKAnnotationView δεν απενεργοποιεί userInteractionEnabled της, ενώ στο iOS 3 το κάνει. Ακόμα ψάχνει για μια λύση για iOS 3 ...

EDIT : στην πραγματικότητα, αυτό φαίνεται να είναι ένα bug στο iOS 4.1. Στο iOS 4.2, απενεργοποιώντας μια καρφίτσα απενεργοποιεί επίσης τα γεγονότα αφής. Ως εκ τούτου αυτή η μέθοδος λειτουργεί μόνο για 4.1 και, ενδεχομένως, 4.0.

Απαντήθηκε 21/10/2010 στις 06:47
πηγή χρήστη

ψήφοι
0

Δείτε τη λύση σε αυτό το ζήτημα . Βασικά θα δημιουργήσετε μια διαφανή UIView που θα παρακολουθήσει όλες τις πινελιές. Δεν το έχω δοκιμάσει, αλλά αυτό μπορεί να είναι περισσότερο πρόβλημα από ό, τι αξίζει τον κόπο, αν έχετε να reimplement όλες τις λειτουργίες τσίμπημα-to-zoom στο 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