Harita üzerinde çakışan ek açıklamalar (MKAnnotationView) ile Sayı

oy
9

Benim iphone uygulamasında, ben MKMapView ve özel MKAnnotationView ile MapKit kullanıyorum.

ek açıklamalar (Uygulamamda, ek açıklamalar fotoğraflar ve bu fotoğrafların çakışabilir) harita üzerinde üst üste ve ön yüzünde görünen notu üzerine dokunun, bu olayı alır (arkasında) Başka bir ek açıklama var ne zaman sorunudur (rasgele gibi görünüyor ).

Ön ek nota olayı göndermek için herhangi bir şekilde bulamadık. Bu hata / sorun herhangi bir çözüm yok inanamıyorum!

Z sipariş ve ek açıklamalar örtüşen al o kadar bana yardım etmedi stackoverflow sorular.

bir fikrin karşılama (hatta kirli çözümler) 'dir edin!

İşte benim kod (fantezi şey, çok yaygın) bazıları aşağıda verilmiştir:

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

Ana sınıfı ... // Açıklamalar eklenir ve bazıları diğerleri ile örtüşmektedir.

- (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;
}
Oluştur 18/03/2010 saat 16:07
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
2

Son olarak, en iyi yolu buldum ve o harita funcionalities kaybederek etmektir önler:

  • (Her ek açıklama üzerine) CustomAnnotationView (touchesEnded) dokunmatik dinleyici izin

  • Dokunmatik olayı alırken, ana sınıfa olayı aktarmak

  • Ana sınıfı ek açıklamalarına yapılan döngüler ve (ek açıklama çerçevesinde dokunmatik olayı) iyi bir konuma sahiptir ek açıklama tutar ve o önünde

Oldukça iyi çalışıyor.

Cevap 22/04/2010 saat 12:04
kaynak kullanıcı

oy
0

Ben ön görünümüne UITapGestureRecognizer ekledik ve bu benim için sorun çözüldü.

Senin durumunda, CustomAnnotationView bir jest tanıyıcı ekleyerek sorunu çözmek gerekir.

Cevap 15/12/2011 saat 15:04
kaynak kullanıcı

oy
0

Alexandre'nın cevap takip, ben bütün özel MKAnnotationViews ile nesnelerin devre dışı

annView.enabled = NO

Aşağıdaki MKAnnotationView yüzden MKMapView varsayılan seçme davranışa tepki ve benim özel uygulanan yoktur:

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

Bu çözüm iOS 3 öyle ise, bir MKAnnotationView onun userInteractionEnabled devre dışı bırakmaz devre dışı bırakılması gibi görünüyor iOS 4. büyük çalışır. Yine iOS 3 için çözüm arayan ...

DÜZENLEME : Aslında bu iOS 4.1 bir hata gibi görünüyor. IOS 4.2 sürümünde, bir iğne devre dışı bırakılması da dokunmatik olaylarını devre dışı bırakır. Bu nedenle bu yöntem yalnızca 4.1 ve muhtemelen 4.0 için çalışır.

Cevap 21/10/2010 saat 06:47
kaynak kullanıcı

oy
0

Buna çözüm bakın soruya . Temel olarak dokunur her müdahale edecek şeffaf UIView oluşturacağız. Ben hiç denemedim ama MKMapView içinde tutam-to-zoom tüm işlevselliği yeniden uygulamaya varsa bu bu değer daha fazla sorun olabilir.

Eğer iki (veya daha fazla) MKAnnotations biçimde konumlandırılmış varsa tekrar tekrar ikisi arasında geçiş yapmak için dokunabilirsiniz. Yani uygulamanızda herhangi bir değişiklik olmadan çalışması gerekir.

Cevap 21/04/2010 saat 15:04
kaynak kullanıcı

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