Как создать разноцветные булавки на карте? - PullRequest
0 голосов
/ 30 октября 2011

Моя карта должна отображать КРАСНЫЕ штыри для «Места проведения» и СИНИЕ штыри для «Стоянки» рядом с ними и вокруг них.

Проблема в том, что оба контакта отображаются одинакового цвета.

Код ниже:

Мой класс pinAnnotation выглядит так:

#import <MapKit/MapKit.h>


@interface mapPinAnnotation : NSObject  <MKAnnotation>  {    
    NSString *title;
    NSString *subtitle;
    NSString *pinType; // this string will be set to either "Venue" or "Parking"
    CLLocationCoordinate2D coordinate;
}


@property (nonatomic, retain) NSString *title, *subtitle;
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString *pinType;


@end

Это реализация:

#import "mapPinAnnotation.h"

@implementation mapPinAnnotation

@synthesize coordinate;
@synthesize pinType;
@synthesize title, subtitle;

-(id) initWithCoordinate: (CLLocationCoordinate2D) c {
    coordinate = c;
    return self;
}    

@end

Вот метод установки выводов - обратите внимание, что я использую переменную «tempPin» - объявленную глобально - так что я могу затем передать этот вывод в метод «viewForAnnotation» - но я думаю, что здесь проблема:

-(void) dropThePin {
    CLLocationCoordinate2D location = mapView.userLocation.coordinate;

    location.latitude = latitude;
    location.longitude = longitude;        

    if(pinAnnotation != nil) {
        [mapView removeAnnotation:pinAnnotation];
        [pinAnnotation release];
        pinAnnotation = nil;
    }

    // Create (alloc/init) a Pin, set its Title & Subtitle, and add/place it:
    pinAnnotation = [[mapPinAnnotation alloc] initWithCoordinate:location];
    pinAnnotation.pinType = @"VENUE";

    tempPin = pinAnnotation;

    [pinAnnotation setTitle: @"Some Stadium"];
    [pinAnnotation setSubtitle: @"123 Main St."];

    [mapView addAnnotation:pinAnnotation];


    // Set-Up of 2nd. Pin:
    location.latitude = 12.34567;
    location.longitude = -23.45678;

    pinAnnotation.pinType = @"PARKING";
    if(parkingLotPin != nil) {
        [mapView removeAnnotation:parkingLotPin];
        [parkingLotPin release];
        parkingLotPin = nil;
    }

    // Create (alloc/init) a Pin, set its Title & Subtitle, and add/place it:
    parkingLotPin = [[mapPinAnnotation alloc] initWithCoordinate:location];

    tempPin = pinAnnotation;
    [parkingLotPin setTitle: @"Another Venue"];
    [parkingLotPin setSubtitle: @"789 S. Broad Street"];

    [mapView addAnnotation:parkingLotPin];
    [parkingLotPin release];

}

Наконец, вот метод "viewForAnnotation":

-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation {

    MKPinAnnotationView *thePin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

    if (tempPin.pinType == @"VENUE") {
        thePin.pinColor = MKPinAnnotationColorGreen;
        NSLog(@"pin-type = %@", tempPin.pinType);
    } else {
        thePin.pinColor = MKPinAnnotationColorPurple;
        NSLog(@"pin-type = %@", tempPin.pinType);
    }

    thePin.animatesDrop=TRUE;
    thePin.canShowCallout = YES;
    thePin.calloutOffset = CGPointMake(-5, 5);
    return thePin;
}

Проблема в том, что оба вывода отображаются одинакового цвета.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Попробуйте изменить:

if (tempPin.pinType == @"VENUE") {

на:

if ([((mapPinAnnotation*)annotation).pinType isEqualToString:@"VENUE"]) {
0 голосов
/ 30 октября 2011
if ([tempPin.pinType isEqualToStirng:@"VENUE"]) {
    thePin.pinColor = MKPinAnnotationColorGreen;
    NSLog(@"pin-type = %@", tempPin.pinType);
} else {
    thePin.pinColor = MKPinAnnotationColorPurple;
    NSLog(@"pin-type = %@", tempPin.pinType);
}

Также посмотрите на это

...