2010-03-10 3 views
12

È possibile aprire contemporaneamente più di un callout?Callout di annotazioni multiple visualizzati in MKMapView

Il codice:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView { 
    for (id<MKAnnotation> currentAnnotation in theMapView.annotations) { 
     [theMapView selectAnnotation:currentAnnotation animated:YES]; 
    } 
} 

apre un solo richiamo.

+0

Perché più di 1? Le dimensioni dello schermo non sono abbastanza grandi e questo confonde l'utente. – kennytm

+2

Esatto, ma se ci sono solo due tre birilli sulla mappa con una distanza abbastanza grande tra di loro, l'utente non sarebbe confuso. E, sì, questo è il requisito del mio cliente. – Ievgen

risposta

7

Da una prospettiva API rigorosa, questo non sembra possibile.

Il selettore -(void)setSelected:(BOOL)selected animated:(BOOL)animated su MKAnnotationView afferma: ". Non si dovrebbe chiamare questo metodo direttamente oggetto Un MKMapView chiama questo metodo in risposta alle interazioni degli utenti con l'annotazione" in modo che il messaggio di fondo è che la selezione delle istanze annotationView in sotto la piena responsabilità della selezione dell'utente, e poiché l'utente può selezionarne solo uno alla volta, non dovrebbe essere possibile selezionarne più di uno nello stesso momento.

Anche se la documentazione dice che non si dovrebbe chiamare direttamente questo metodo, si è tentato comunque di invocarlo con setSelected:YES su più istanze MKAnnotationView per vedere cosa fornisce?

IL MODO PULITO lo farei: (non me testato però)

  • non si basano sul meccanismo di selezione del MKMapView
  • sottoclasse il MKAnnotationView per implementare uno personalizzato
  • esegui la personalizzazione in modo tale che il callout faccia parte della vista annotazione in modo che sia possibile visualizzarne diversi.

Se lo fate in questo modo, è possibile far apparire diversi bolla didascalia allo stesso tempo e ottenere qualcosa che sarebbe simile:

alt text http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg

+0

Grazie per la risposta. Sì, hai ragione, potrebbe funzionare. – Ievgen

+0

sei riuscito a farlo funzionare? –

9

Si noti che non v'è un metodo su MKMapView (non MKAnnotationView) per la selezione di un'annotazione a livello di codice che funziona più o meno come ci si aspetterebbe:

- (void)selectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated 

Tuttavia, deseleziona automaticamente qualsiasi attualmente annotazione allo stesso tempo, quindi questo non risolve il tuo problema.

Stranamente, c'è una proprietà su MKMapView che sembra contenere una serie di annotazioni attualmente selezionato:

@property(nonatomic, copy) NSArray *selectedAnnotations 

Ma la documentazione su questo metodo dice:

"Assegnazione di un nuovo array per questa proprietà seleziona solo la prima annotazione nell'array . "

Ho pensato che questo potrebbe interessare.

+0

Purtroppo ma vero, dal 2013 e iOS 6.1, è ancora come descrivi. – Klaas