MapKit code pin personnalisé annotation
J'ai les fichiers suivants:
annotation.h:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface annotation : NSObject <MKAnnotation>
@property(nonatomic, assign) CLLocationCoordinate2D coordinate;
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *subtitle;
@end
annotation.m:
#import "annotation.h"
@implementation annotation
@synthesize coordinate, title, subtitle;
@end
Et dans le code principal, qui prend dans un NSURL
constaté ailleurs:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[spinner stopAnimating];
//json parsing
results = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
NSMutableArray * locations = [[NSMutableArray alloc] init];
CLLocationCoordinate2D location;
annotation * myAnn;
NSArray *pins = mapView.annotations;
if ([pins count])
{
[mapView removeAnnotations:pins];
}
/* loop through the array, each key in the array has a JSON String with format:
* title <- string
* strap <- string
* id <- int
* date <- date
* lat <- floating point double
* long <- floating point double
* link <- string
*/
int i;
for (i = 0; i < [results count]; i++) {
//NSLog(@"Result: %i = %@", i, results[i]);
//NSLog(@"%@",[[results objectAtIndex:i] objectForKey:@"long"]);
myAnn = [[annotation alloc] init];
location.latitude = (double)[[[results objectAtIndex:i] objectForKey:@"lat"] doubleValue];
location.longitude = (double)[[[results objectAtIndex:i] objectForKey:@"long"] doubleValue];
myAnn.coordinate = location;
myAnn.title = [[results objectAtIndex:i] objectForKey:@"title"];
myAnn.subtitle = [[results objectAtIndex:i] objectForKey:@"strap"];
[locations addObject:myAnn];
//NSLog(@"%i", [[results objectAtIndex:i] objectForKey:@"lat"]);
}
[self.mapView addAnnotations:locations];
Précédente choses que j'ai regardé pour dire ce que j'ai besoin d'utiliser MKAnnotationView
par opposition à MKPinAnnotationView
mais comme vous pouvez le voir, je n'utilise pas non plus, est-il possible pour moi d'utiliser des images personnalisées pour les broches qui sont déposés sur l'écran.
- Quelle est votre question?
- Désolé, modifier. J'ai besoin d'utiliser une image personnalisée au lieu de l'habituel rouge pin
Vous devez vous connecter pour publier un commentaire.
Vous (a) assurez-vous de définir votre point de vue contrôleur de la
delegate
pour votreMKMapView
; et (b) mettre en œuvreviewForAnnotation
, par exemple:Par la façon dont, dans mon exemple ci-dessus, j'ai changé le nom de votre
annotation
classe deCustomAnnotation
.annotation
est un nom horrible pour une classe, parce que (a) il ne suit pas les conventions de nommage des classes de majuscule la première lettre; et (b) il est identique au nom de la variable,annotation
, que de nombreuxMKMapViewDelegate
méthodes à utiliser par défaut.Références
Les Services De Géolocalisation Guide De Programmation
Carte Kit De Cadre De Référence
delegate
pour la mapview (vous pouvez soit le faire au bureau de l'IB, ou dans votreviewDidLoad
vous pouvez avoir une ligne qui dit "self.mapView.delegate = self;
". Vous pouvez également ajouter un "<MKMapViewDelegate>
" à la fin de la@interface
ligne pour votre vue-contrôleur. Voir le "Annoter les Cartes" section de la Lieu de Sensibilisation du Guide de Programmation.@property (weak, nonatomic) IBOutlet MKMapView *mapView;
.customAnnotation
, mais plutôtCustomAnnotation
. Les Classes commencent par une majuscule, variables commencent par des lettres minuscules. C'est la convention (et évite précisément le genre de confusion à laquelle j'ai fait allusion dans ma réponse).IBOutlet
n'est de définir une prise de courant que vous nous l'espérons accroché dans Interface Builder. Je suis en train de dire qu'en plus de cela, vous devez vous aussi raccordement de ladelegate
propriété de votreMKMapView
. Vous pouvez soit le faire dans le code (comme je l'ai décrit ci-dessus) ou, mieux, dans Interface Builder, sélectionnez leMKMapView
aller à des points de vente de l'inspecteur (le dernier onglet de cette fenêtre sur la droite), vous verrez ledelegate
de propriété qui y sont énumérés, et faites glisser le lien de celui de votre vue-contrôleur.Vous pouvez certainement utiliser des images personnalisées pour un
MKAnnotationView
, voir iOS MapKit personnalisé des goupilles.Les deux
MKAnnotationPinView
etMKAnnotationView
sont des sous-classes de UIView et, par conséquent, permettra de vues personnalisées.