Настройте аннотации карты из plist - PullRequest
1 голос
/ 10 февраля 2011

Я нашел краткое руководство о том, как загрузить «данные аннотаций» из списка и добавить эти аннотации (булавки) в MapView.

У меня вопрос, может ли кто-нибудь сказать мне, как мне проще всего настроить контакты? В качестве примера я хотел бы определить цвет и изображение в листе, а затем задать его при добавлении контактов.

Штифты добавляются так:

MyAnnotation.m:

@implementation MyAnnotation
@synthesize title, subtitle, coordinate;

-(void) dealloc {
    [super dealloc];
    self.title = nil;
    self.subtitle = nil;
}

MyAnnotation.h

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotation : NSObject<MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
}

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* subtitle;

Запуск через plist в ViewDidLoad в MapViewController.m (массивы, содержащие словари для каждого вывода) и добавление аннотаций.

NSString *path = [[NSBundle mainBundle] pathForResource:@"Annotations" ofType:@"plist"];
    NSMutableArray* anns = [[NSMutableArray alloc] initWithContentsOfFile:path];

    for(int i = 0; i < [anns count]; i++) {
        float realLatitude = [[[anns objectAtIndex:i] objectForKey:@"latitude"] floatValue];
        float realLongitude = [[[anns objectAtIndex:i] objectForKey:@"longitude"] floatValue];

        MyAnnotation* myAnnotation = [[MyAnnotation alloc] init];
        CLLocationCoordinate2D theCoordinate;
        theCoordinate.latitude = realLatitude;
        theCoordinate.longitude = realLongitude;
        myAnnotation.coordinate = theCoordinate;
        myAnnotation.title = [[anns objectAtIndex:i] objectForKey:@"title"];
        myAnnotation.subtitle = [[anns objectAtIndex:i] objectForKey:@"subtitle"];
        [mapView addAnnotation:myAnnotation];
        [annotations addObject:myAnnotation];
        [myAnnotation release];
    }

EDIT:

Я добавил метод viewForAnnotation, который устанавливает цвет, но как я могу установить цвет каждого пина по отдельности?

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil;

    if(annotation != mapView.userLocation) {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinView.pinColor = MKPinAnnotationColorPurple; 
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;
    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }

    return pinView;
}

1 Ответ

0 голосов
/ 10 февраля 2011

Решено! Это можно сделать так в методе viewForAnnotation:

for(MyAnnotation* a in mapView.annotations) {
            if(annotation == a && annotation != mapView.userLocation) {
                pinView.image = [UIImage imageNamed:a.annImage];
            }
        }
...