Z-uspořádání MKAnnotationViews

hlasů
13

Začínám docela frustrovaný s omezeními MKMapKit. Můj současný problém má co do činění s z- uspořádání zobrazení anotace, zejména pokud se týká doteky. Máte-li přijmout výchozí vykreslování objednávky mapkit vám dává:

  1. Pořadí se objeví náhodně. Pořadí vykreslování nesouvisí s cílem byly přidány poznámky.
  2. Jestliže jeden anotace skončí na vrcholu jiný, dotýká horní anotace zpravidla vyvolá popisek pro spodní anotaci. Vypadá to, že hit detekci ani dodržovat pořadí kreslení. Co je s tím?

Snažil jsem se řešení # 1 s použitím něco podobného následující kód nalezené na webu (který byl navržen tak, aby dát nějakou kontrolu nad tím, z-pořadí)

- (void) MapView: (MKMapView *) MapView didAddAnnotationViews: (NSArray *) pohledy {
   pro (MKAnnotationView * annView v pohledech) {
      TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView Anotace];
      if ([Ann nahoru]) {
         [[AnnView SuperView] bringSubviewToFront: annView];
      } Else {
         [[AnnView SuperView] sendSubviewToBack: annView];
      }
   }

}

Běh přes pohledy poznámek předány MapView: didAddAnnotationViews: a nastavení jejich pořadí vykreslování nezdá se, že opravit # 1. Problém je v tom, že nyní názory popisky jsou už ne vždy nahoře na zobrazení poznámek. MapKit zdá se dostat velmi zmatená o vrstev (popisky třeba vyvodit ve vrstvě nad všech pohledech anotace). Já si dokonce vymyslet, jak se dostat zmatený, protože všechny MKAnnotationViews obdržíte mít stejnou SuperView (vlastní třídu MKOverlayView). Člověk by si myslel každý rozumný návrh by rád popisky o tomto překryvu pohledu.

Má někdo vyřešil # 1 nebo # 2 úspěšně?

Položena 05/11/2009 v 17:04
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
8

Máte-li vlastní annotationView (což zní jako už máte), můžete zkusit přidat toto:

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

Vedlejším účinkem je, že pokaždé, když značka se dotkl se také objeví na přední straně z řádu, které ve skutečnosti je rozumné, protože to je to, co uživatel se zaměřuje na.

Odpovězeno 05/11/2009 v 17:54
zdroj uživatelem

hlasů
7

Ramin, který je ideální pro to, co se snažím dělat. Neměl jsem s výhledem na zakázku anotace definován ačkoli. Vyřešil jsem to pomocí kategorií a fungovalo to perfektní!

Zde je záhlaví:

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


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

A Realizace:

#import "AEBMapViewCategory.h"
@implementation MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}
@end
Odpovězeno 04/12/2009 v 19:40
zdroj uživatelem

hlasů
6

Zkuste zPosition jiné řešení, anotace Pohled na nastavení vrstvy (annotationView.layer.zPosition) in:

(Neplatné) MapView: (MKMapView *) MapView didAddAnnotationViews: (*) NSArray názory;

Odpovězeno 03/05/2013 v 12:12
zdroj uživatelem

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