Vorrei consentire all'utente della mia app di scegliere una posizione sulla mappa. La mappa nativa ha una funzione "drop pin" in cui è possibile individuare qualcosa facendo cadere un pin. Come posso farlo in MapKit?Come faccio a rilasciare un pin con MapKit?
risposta
È necessario creare un oggetto che implementa l'MKAnnotation protocollo e quindi aggiungere l'oggetto al MKMapView:
@interface AnnotationDelegate : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString * title;
NSString * subtitle;
}
istanzia l'oggetto delegato e aggiungerlo alla mappa:
AnnotationDelegate * annotationDelegate = [[[AnnotationDelegate alloc] initWithCoordinate:coordinate andTitle:title andSubtitle:subt] autorelease];
[self._mapView addAnnotation:annotationDelegate];
La mappa accederà alle proprietà delle coordinate sul tuo AnnotationDelegate per scoprire dove mettere il segnaposto sulla mappa.
Se si desidera personalizzare la vostra vista annotazione è necessario implementare il MKMapViewDelegateviewForAnnotation metodo sulla vostra mappa View Controller:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
Se si desidera implementare la funzionalità perno di trascinamento è possibile leggi come gestire gli eventi di tocco di annotazione nello Apple OS Reference Library.
È inoltre possibile controllare this article in trascinamento con mapkit che fa riferimento a una libreria di campioni funzionante su GitHub. È possibile ottenere le coordinate della annotazione trascinato controllando i _coordinates membro sul DDAnnotation oggetto.
C'è un buon post sul blog e un codice di esempio per il trascinamento delle annotazioni qui: http://hollowout.blogspot.com/2009/07/mapkit-annotation-drag-and-drop-with.html – RedBlueThing
La cosa è anche se tu sono in grado di trascinare, si sarebbe in grado di ottenere la posizione del pin dopo aver finito di trascinare? – erotsppa
Ho aggiornato la mia risposta con un po 'più di dettaglio sul materiale drag-drop. – RedBlueThing
Ci sono diversi modi per cadere uno spillo, e non si specifica in che modo farlo nella sua interrogazione. Il primo modo è di farlo a livello di programmazione, in quanto è possibile utilizzare ciò che RedBlueThing ha scritto, tranne che non hai realmente bisogno di una classe personalizzata (a seconda della versione di iOS che stai utilizzando). Per iOS 4.0 e versioni successive è possibile utilizzare questo frammento di cadere di programmazione un perno:
// Create your coordinate
CLLocationCoordinate2D myCoordinate = {2, 2};
//Create your annotation
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
// Set your annotation to point at your coordinate
point.coordinate = myCoordinate;
//If you want to clear other pins/annotations this is how to do it
for (id annotation in self.mapView.annotations) {
[self.mapView removeAnnotation:annotation];
}
//Drop pin on map
[self.mapView addAnnotation:point];
Se si vuole essere in grado di cadere uno spillo, ad esempio, lungo premendo sul MapView vero e proprio, si può fare in questo modo:
// Create a gesture recognizer for long presses (for example in viewDidLoad)
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 0.5; //user needs to press for half a second.
[self.mapView addGestureRecognizer:lpgr]
- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
return;
}
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = touchMapCoordinate;
for (id annotation in self.mapView.annotations) {
[self.mapView removeAnnotation:annotation];
}
[self.mapView addAnnotation:point];
}
Se si desidera enumerare tutte le annotazioni, è sufficiente utilizzare il codice in entrambi gli snippet. Ecco come si registrano le posizioni per tutte le annotazioni:
for (id annotation in self.mapView.annotations) {
NSLog(@"lon: %f, lat %f", ((MKPointAnnotation*)annotation).coordinate.longitude,((MKPointAnnotation*)annotation).coordinate.latitude);
}
questa domanda ha risposto a cosa ha chiesto @erotsppa – JProgrammer
Potrebbe anche essere necessario impostare il delegato di MapView.
[mkMapView setDelegate:self];
Poi chiamare il suo delegato, viewForAnnotation
:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKPinAnnotationView *pinAnnotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"current"];
pinAnnotationView.animatesDrop = YES;
pinAnnotationView.pinColor = MKPinAnnotationColorRed;
return pinAnnotationView;
}
è possibile ottenere toccati posizione da, jcesarmobile risposta su ottenere sfruttato coordinates with iphone mapkit e si può cadere uno spillo in qualsiasi luogo come muggito
// Define pin location
CLLocationCoordinate2D pinlocation;
pinlocation.latitude = 51.3883454 ;//set latitude of selected coordinate ;
pinlocation.longitude = 1.4368011 ;//set longitude of selected coordinate;
// Create Annotation point
MKPointAnnotation *Pin = [[MKPointAnnotation alloc]init];
Pin.coordinate = pinlocation;
Pin.title = @"Annotation Title";
Pin.subtitle = @"Annotation Subtitle";
// add annotation to mapview
[mapView addAnnotation:Pin];
- 1. (iPhone) come implementare i pin trascinabili usando OS 4.0 MapKit?
- 2. MapKit non mostra immagine pin di annotazione personalizzata su iOS9
- 3. Come seguire la posizione dell'utente con MapKit
- 4. Come faccio a rilasciare una tabella da SQLite3 in DJango?
- 5. Perni iOS MapKit personalizzati
- 6. Rilasciare un messaggio a SQS
- 7. Come aggiungere pin (annotazioni) con Xcode 6 (Swift)
- 8. Come rilasciare un blocco
- 9. Toubleshooting prestazioni del mapkit
- 10. iPhone MapKit: accessibilità delle annotazioni
- 11. Immagine al posto del pin predefinito nel framework MapKit di iPhone?
- 12. MapKit iOS 9 detailCalloutAccessoryUtilizzo di visualizzazione
- 13. Raggruppamento in MapKit con Swift
- 14. Come rilasciare un programma semplice
- 15. Come utilizzare le icone personalizzate con il framework mapKit?
- 16. Come faccio a inviare un modulo con un LinkButton?
- 17. API di Google Maps - Rilascia un nuovo pin
- 18. Come forzare Universal Application a rilasciare memoria?
- 19. Pin un puntatore di funzione
- 20. Zoom personalizzato polilinea MapKit?
- 21. Come visualizzare la mappa offline in iphone utilizzando Mapkit
- 22. Come faccio a "passare" con Mercurial
- 23. MapTypeStyle in MapKit
- 24. Come faccio a sintonizzarsi con Linq
- 25. Come faccio con HQL, molti a molti?
- 26. Come faccio a scaricare lentamente con PLINQ?
- 27. Come faccio a scrivere questo con RSpec
- 28. Come aprire richiamare MKAnnotationView al livello di programmazione? (iPhone, MapKit)
- 29. Come faccio a stub un emettitore evento con Sinon.js
- 30. Come faccio a attivare manualmente un evento delegato con jQuery?
Se c'è qualcosa che posso chiarire con la mia risposta. Per favore mi faccia sapere. – RedBlueThing
Quando questo è stato scritto, c'erano almeno due buone risposte tra cui scegliere. Fai la tua scelta. – JugsteR