Z-zamawianie MKAnnotationViews

głosy
13

Dostaję dość sfrustrowany ograniczeń MKMapKit. Mój obecny problem ma zrobić z oo zamawiania poglądów adnotacji, szczególnie odnosi się ona do akcentami. Jeśli przyjąć domyślną z-Zamów mapkit daje:

  1. Kolejność pojawia losowy. Z-zamówienie jest związana z celem adnotacje dodano.
  2. Jeżeli jeden Adnotacja kończy się na górze drugiego, dotykając górnej adnotacje na ogół prowadzi się objaśnienie do dolnej adnotacji. Wydaje się, że wykrywania przeboju nawet nie przestrzegają kolejność rysowania. Co z tego?

Próbowałem rozwiązywania nr 1 przy użyciu coś podobnego do następującego kodu znalezionego w internecie (który został zaprojektowany, aby dać pewną kontrolę nad Z-order)

- (void) MapView: (MKMapView *) MapView didAddAnnotationViews: (NSArray *) widokach {
   for (MKAnnotationView * annView w widokach) {
      TopBottomAnnotation * Ann = (TopBottomAnnotation *) [annView Adnotacja];
      if ([Ann góry]) {
         [[AnnView Superview] bringSubviewToFront: annView];
      } Else {
         [[AnnView Superview] sendSubviewToBack: annView];
      }
   }

}

Przejazd przez widokach adnotacji przekazywanych MapView: didAddAnnotationViews: i dostosowanie ich kolejności z wydaje się naprawić # 1. Problemem jest to, że teraz poglądy objaśnień nie są już zawsze na wierzchu do widoków adnotacji. MapKit wydaje się bardzo pomylić o warstwach (objaśnienia powinny być sporządzone w warstwie powyżej wszystkich widokach adnotacji). Mogę nawet dowiedzieć się, jak to jest uzyskiwanie mylić ponieważ wszystkie MKAnnotationViews otrzymasz mają taką samą Superview (prywatną klasę MKOverlayView). Można by pomyśleć, każdy rozsądny projekt będzie wyciągnąć objaśnienia na temat tego widoku nakładki.

Czy ktoś rozwiązał nr 1 lub nr 2 z powodzeniem?

Utwórz 05/11/2009 o 17:04
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
8

Jeśli masz zwyczaj annotationView (co brzmi jak już masz), można spróbować dodać to:

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

Skutkiem ubocznym jest to, że za każdym razem gdy znacznik jest dotknął również wyskakuje do przodu z-porządek, który faktycznie ma sens, ponieważ to, co użytkownik koncentruje się na.

Odpowiedział 05/11/2009 o 17:54
źródło użytkownik

głosy
7

Ramin, że jest idealny do tego, co próbuję zrobić. Nie miałem niestandardowego widoku adnotacji zdefiniowany choć. I rozwiązać to za pomocą kategorii i to działało idealnie!

Oto nagłówek:

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


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

I realizacji:

#import "AEBMapViewCategory.h"
@implementation MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}
@end
Odpowiedział 04/12/2009 o 19:40
źródło użytkownik

głosy
6

Spróbuj zPosition Innym rozwiązaniem, konfiguracja Adnotacja widok warstwy'S (annotationView.layer.zPosition) w:

(Void) MapView: (MKMapView *) didAddAnnotationViews MapView: (*) NSArray widoków;

Odpowiedział 03/05/2013 o 12:12
źródło użytkownik

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