MKPointAnnotation не изменит цвета

Мне нужно изменить цвет объекта MKPointAnnotation , но метод, который я написал, кажется, генерирует только красные булавки. Метод работает нормально, но когда я вызываю функцию, передавая параметр одной из заданной константы, все контакты, которые появляются на карте, являются красными (по умолчанию). Есть предположения? Код ниже.

  -(MKAnnotationView*) returnPointView: (CLLocationCoordinate2D) location andTitle: (NSString*) title andColor: (int) color{ /*Method that acts as a point-generating machine. Takes the parameters of the location, the title, and the color of the pin, and it returns a view that holds the pin with those specified details*/ MKPointAnnotation *resultPin = [[MKPointAnnotation alloc] init]; MKPinAnnotationView *result = [[MKPinAnnotationView alloc] initWithAnnotation:resultPin reuseIdentifier:Nil]; [resultPin setCoordinate:location]; resultPin.title = title; result.pinColor = color; return result; } //Function that calls above method for(Party *party in allParties){ if(!party.alreadyAdded){ CLLocationCoordinate2D location = [party getPartylocation]; NSString *partyTitle = [party getPartyName]; MKAnnotationView *partyPin = [self returnPointView:location andTitle:partyTitle andColor:MKPinAnnotationColorGreen]; [self.map addAnnotation:partyPin.annotation]; NSLog(@"Adding Successful!"); party.alreadyAdded = YES; } } 

2 Solutions collect form web for “MKPointAnnotation не изменит цвета”

Вы должны соответствовать протоколу MKMapViewDelegate в заголовке вашего ViewController.

 @interface mapViewController : UIViewController <MKMapViewDelegate> @end 

Затем в реализации вам нужно написать метод:

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

Это называется каждый раз при аннотации. Здесь вы должны назвать свой метод не только добавлением аннотации.

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKAnnotationView *pinView = [self returnPointView:annotation.coordinate andTitle:annotation.title andColor:MKPinAnnotationColorGreen]; return pinView; } 

Наконец, установите ViewController в качестве делегата делегата UIMapView в viewDidLoad:

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.mapView setDelegate:self]; } 

Я предлагаю вам взглянуть на проект примера MapCallouts в Xcode, это понятно и просто.

Точно также вы должны использовать dequeueReusableAnnotationViewWithIdentifier , чтобы иметь большую эффективность памяти (как в примере).

Ваше возвращаемое значение может быть неправильным … вы возвращаете MKAnnotationView вместо MKPinAnnotationView … MKAnnotationView не имеет атрибута, называемого pinColor .. это должно работать

 -(MKPinAnnotationView*) returnPointView: (CLLocationCoordinate2D) location andTitle: (NSString*) title andColor: (int) color{ /*Method that acts as a point-generating machine. Takes the parameters of the location, the title, and the color of the pin, and it returns a view that holds the pin with those specified details*/ MKPointAnnotation *resultPin = [[MKPointAnnotation alloc] init]; MKPinAnnotationView *result = [[MKPinAnnotationView alloc] initWithAnnotation:resultPin reuseIdentifier:Nil]; [resultPin setCoordinate:location]; resultPin.title = title; result.pinColor = color; return result; } //Function that calls above method for(Party *party in allParties){ if(!party.alreadyAdded){ CLLocationCoordinate2D location = [party getPartylocation]; NSString *partyTitle = [party getPartyName]; MKPinAnnotationView *partyPin = [self returnPointView:location andTitle:partyTitle andColor:MKPinAnnotationColorGreen]; [self.map addAnnotation:partyPin.annotation]; NSLog(@"Adding Successful!"); party.alreadyAdded = YES; } } 
PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.