Comment puis-je prendre une paire de latitude, flotteurs de longitude et obtenir le MKMapView de laisser tomber une épingle et d'afficher l'emplacement?

voix
0

Étant donné une paire de flotteurs pour la latitude et la longitude, et un MapView, comment puis-je le MapView de laisser tomber une épingle dans l'emplacement et « zoom » de l'écran pour afficher l'emplacement?

Je l'ai lu quelques-uns des messages SO et ils semblent tous être sur les aspects spécifiques de cela, mais je ne l'ai pas été en mesure de « les mettre ensemble » dans ma tête.

Merci beaucoup! -Franc

Créé 08/05/2010 à 22:04
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Les applications échantillons WorldCities montre comment vous pouvez zoomer sur un endroit donné , mais il ne laissez pas tomber une épingle là. Une autre exemple d' application appelé MapCallouts ne broches de chute , mais il n'a pas de zoomer.

La partie de zoom est facile (voir méthode didChooseWorldCity en WorldCities).

Pour déposer une épingle, vous devez envoyer le message AddAnnotation à l'MapView et l'envoyer un objet qui implémente le protocole MKAnnotation. Donc, vous devez d'abord créer une classe qui implémente MKAnnotation. Voici un exemple appelé MyMapPin:

//MyMapPin.h...
#import <MapKit/MapKit.h>
@interface MyMapPin : NSObject <MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *subtitle; 
    NSString *title; 
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic,retain) NSString *title;
- (id) initWithCoords:(CLLocationCoordinate2D) coords;
@end

//MyMapPin.m...
#import "MapPin.h"
@implementation MyMapPin
@synthesize coordinate;
@synthesize subtitle;
@synthesize title;
- (id) initWithCoords:(CLLocationCoordinate2D) coords {
    self = [super init];
    if (self != nil) {
        coordinate = coords; 
    }
    return self;
}
- (void) dealloc
{
    [title release];
    [subtitle release];
    [super dealloc];
}
@end

Maintenant, vous pouvez modifier l'échantillon de WorldCities en ajoutant ce code au début de la méthode animateToPlace:

MyMapPin *pin = [[MyMapPin alloc] initWithCoords:worldCity.coordinate];
[mapView addAnnotation:pin];
[pin release];

worldCity.coordinate dans l'application WorldCities est juste une propriété de type CLLocationCoordinate2D qui a deux champs de latitude et la longitude. Les deux flotteurs iraient là-bas.

Notez que le AddAnnotation mettra juste une épingle à la ville. Pour obtenir une broche de chute d'animation, vous devez également mettre en œuvre la méthode viewForAnnotation et mettre animatesDrop YES. Voir un exemple dans MapViewController.m en MapCallouts. Définissez également le délégué du MapView à chaque fois que la méthode de viewForAnnotation est mis en œuvre (généralement auto / propriétaire du fichier).

Créé 09/05/2010 à 03:54
source utilisateur

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