Ζ-παραγγελία MKAnnotationViews

ψήφοι
13

Παίρνω αρκετά απογοητευμένοι με τους περιορισμούς της MKMapKit. τρέχον πρόβλημα μου έχει να κάνει με το z-παραγγελία απόψεων σχολιασμού, ιδίως όσον αφορά πινελιές. Εάν αποδεχτείτε την προεπιλεγμένη z-order το mapkit σας δίνει:

  1. Η σειρά εμφανίζεται τυχαία. Η ζ-παραγγελίας είναι άσχετη με τη σειρά προστέθηκαν τα σχολιασμούς.
  2. Αν κάποιος σχολιασμός καταλήγει πάνω από ένα άλλο, αγγίζοντας την κορυφή σχολιασμό γενικά εμφανίζει το μήνυμα προώθησης για το κάτω μέρος σχολιασμό. Φαίνεται σαν η ανίχνευση χτύπημα ούτε καν σέβεται τη σειρά κλήρωσης. Τι συμβαίνει με αυτό?

Έχω δοκιμάσει την επίλυση # 1 χρησιμοποιώντας κάτι παρόμοιο με το ακόλουθο κώδικα που βρέθηκαν στο διαδίκτυο (το οποίο σχεδιάστηκε για να δώσει κάποιο έλεγχο z-order)

- (void) MapView: (MKMapView *) MapView didAddAnnotationViews: (NSArray *) προβολές {
   για (MKAnnotationView * annView σε προβολές) {
      TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView σχολιασμό]?
      εάν ([Αηη top]) {
         [[AnnView superview] bringSubviewToFront: annView]?
      } Αλλού {
         [[AnnView superview] sendSubviewToBack: annView]?
      }
   }

}

Διέλευση από τις προβολές σχολιασμού πέρασε MapView: didAddAnnotationViews: και προσαρμογή z-σειρά τους φαίνεται να διορθώσετε # 1. Το πρόβλημα είναι ότι τώρα οι απόψεις επεξήγηση δεν είναι πλέον πάντα στην κορυφή με τις απόψεις σχολιασμό. Η MapKit φαίνεται να πάρετε πολύ σύγχυση σχετικά με τα στρώματα (πρέπει να γίνει επεξηγήσεις σε ένα στρώμα πάνω από όλες τις προβολές σχολιασμού). Έχω ακόμα να καταλάβω πώς να πάρει σύγχυση αφού όλοι οι MKAnnotationViews λάβετε την ίδια superview (ιδιωτική τάξη MKOverlayView). Θα πίστευε κανείς ότι κάθε λογικός σχεδιασμός θα αντλήσει τα μηνύματα σχετικά με αυτήν την άποψη επικάλυψης.

Έχει κανείς λυθεί # 1 ή # 2 με επιτυχία;

Δημοσιεύθηκε 05/11/2009 στις 17:04
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
8

Εάν έχετε μια προσαρμοσμένη annotationView (το οποίο ακούγεται σαν έχετε ήδη), μπορείτε να δοκιμάσετε να προσθέσετε αυτό:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}

Μια παρενέργεια είναι ότι κάθε φορά που ένας δείκτης άγγιξε επίσης εμφανίζεται στο μπροστινό μέρος του z τάξης, η οποία στην πραγματικότητα είναι λογικό δεδομένου ότι είναι αυτό που ο χρήστης επίκεντρο.

Απαντήθηκε 05/11/2009 στις 17:54
πηγή χρήστη

ψήφοι
7

Ramin, που είναι ιδανικό για αυτό που προσπαθώ να κάνω. Δεν είχα μια προσαρμοσμένη προβολή σχολιασμού ορίζεται όμως. Έλυσα αυτό, χρησιμοποιώντας μια κατηγορία και δούλεψε τέλεια!

Εδώ είναι η κεφαλίδα:

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h>


@interface MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
@end

Και η εφαρμογή:

#import "AEBMapViewCategory.h"
@implementation MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}
@end
Απαντήθηκε 04/12/2009 στις 19:40
πηγή χρήστη

ψήφοι
6

Δοκιμάστε zPosition μια άλλη λύση, το σχολιασμό εγκατάσταση στρώμα άποψη του (annotationView.layer.zPosition) στο:

(Κενό) MapView: (MKMapView *) didAddAnnotationViews MapView: (NSArray *) απόψεις?

Απαντήθηκε 03/05/2013 στις 12:12
πηγή χρήστη

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