Z-sorrendet az MKAnnotationViews

szavazat
13

Kezdek elég csalódott a korlátozások MKMapKit. A jelenlegi probléma, hogy köze van a Z-sorrendet kommentármegjelenítések nézetek, különösen mivel ez vonatkozik érinti. Ha elfogadja az alapértelmezett levőt a mapkit ad:

  1. A sorrend véletlenszerűnek tűnik. A Z-rend független a sorrendben annotációinak adunk.
  2. Ha az egyik annotáció végül a tetején egy másik, hozzáér a felső annotáció általában hozza fel a feliratot az alsó annotáció. Úgy tűnik, mintha a hit detektáló sem tartja tiszteletben a sorsolás érdekében. Mi van ezzel?

Megpróbáltam megoldása # 1 használatával valami hasonló a következő kódot találtam a neten (amelynek célja az volt, hogy néhány felett levőt)

- (void) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) nézetek {
   A (MKAnnotationView * annView nézetekben) {
      TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView annotáció];
      ha a ([Ann tetejére]) {
         [[AnnView SuperView] bringSubviewToFront: annView];
      } más {
         [[AnnView SuperView] sendSubviewToBack: annView];
      }
   }

}

Fut át ​​a kommentár nézetek át mapView: didAddAnnotationViews, és hozzáigazítják levőt tűnik, hogy rögzítse # 1. A probléma az, hogy most a kiemelő nézetek nem mindig a tetején, hogy a kommentár nézeteit. A MapKit úgy tűnik, hogy nagyon zavaros a rétegek (kiemelések kell készíteni egy réteg felett minden kommentár megtekintés). Még azt is kitalálni, hogyan kezd zavaros, mivel minden MKAnnotationViews kap ugyanaz SuperView (saját osztály MKOverlayView). Azt hiszem, minden ésszerű tervezés szeretné felhívni a feliratokat erről fedvénynézet.

Valaki megoldotta az # 1 vagy # 2 sikeresen?

A kérdést 05/11/2009 17:04
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
8

Ha van egy egyéni annotationView (ami úgy hangzik, hogy már van), akkor próbálja ki ezt:

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

A mellékhatása az, hogy minden alkalommal, amikor egy markert megérintette is megjelenik, hogy az első a z-order, ami valójában ésszerű, mert ez az, amit a felhasználó összpontosít.

Válaszolt 05/11/2009 17:54
a forrás felhasználó

szavazat
7

Ramin, hogy tökéletes, amit próbálok csinálni. Nem volt egy egyéni kommentár nézet meghatározott mégis. Oldottam ezt a segítségével egy kategóriát, és ez tökéletesen működött!

Itt látható a fejléc:

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


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

És Megvalósítás:

#import "AEBMapViewCategory.h"
@implementation MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}
@end
Válaszolt 04/12/2009 19:40
a forrás felhasználó

szavazat
6

Próbáljon ki egy másik megoldás, a telepítést kommentár nézet réteg zPosition (annotationView.layer.zPosition) in:

(Void) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) nézetek;

Válaszolt 03/05/2013 12:12
a forrás felhasználó

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