iOS: Можем ли мы одновременно добавить разные цветные значки на карту?
Я хочу использовать разные цвета на карте, например, некоторые контакты должны быть красного цвета, некоторые контакты должны быть зелеными, а некоторые - фиолетовыми.
Я использую приведенный ниже код, в этом коде за один раз будут пропущены только одни цветные булавки.
Я хочу знать, можем ли мы бросить булавки разных цветов одновременно на карте
-(void)showMap
{
[map_View setZoomEnabled:YES];
[map_View setScrollEnabled:YES];
CLLocationCoordinate2D coordinate;
coordinate.latitude = 49.2802;
coordinate.longitude = -123.1182;
map_View.region = MKCoordinateRegionMakeWithDistance(coordinate, 2000, 2000);
// Set 10 random locations on the map for testing purposes
//
for(int i=0; i<10; i++) {
CGFloat latDelta = rand()*.035/RAND_MAX -.02;
CGFloat longDelta = rand()*.03/RAND_MAX -.015;
CLLocationCoordinate2D newCoord = { coordinate.latitude + latDelta, coordinate.longitude + longDelta };
RetailerAnnotation *ann = [[RetailerAnnotation alloc] initWithLocation:newCoord];
// ann.coordinate = newCoord;
//m_pinColor = @"BLUE";
if(i< 4)
{
m_pinColor = @"RED";
}
else if(i>=4 && i<7)
{
m_pinColor = @"BLUE";
}
else if(i>=7 && i<10)
{
m_pinColor = @"GREEN";
}
NSLog(@"pin color:%@",m_pinColor);
[ann setTitle:[NSString stringWithFormat:@"Title%d",i]];
[ann setSubtitle:[NSString stringWithFormat:@"subTitle%d",i]];
[map_View addAnnotation:ann];
[ann release];
}
}
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
static NSString *identifier = @"myPin";
MKPinAnnotationView *pinView = nil;
NSLog(@"pin color0:%@",m_pinColor);
pinView = (MKPinAnnotationView *)[map_View dequeueReusableAnnotationViewWithIdentifier:identifier];
if (pinView == nil)
{
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
pinView.canShowCallout = YES;
pinView.animatesDrop = YES;
/*
if([m_pinColor isEqualToString:@"RED"]) {
NSLog(@"pin color1:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorPurple];
}
else if([m_pinColor isEqualToString:@"GREEN"]){
NSLog(@"pin color2:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorGreen];
}
else if([m_pinColor isEqualToString:@"BLUE"]){
NSLog(@"pin color3:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorRed];
}*/
}
if([m_pinColor isEqualToString:@"RED"]) {
NSLog(@"pin color1:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorRed];
}
else if([m_pinColor isEqualToString:@"GREEN"]){
NSLog(@"pin color2:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorGreen];
}
else if([m_pinColor isEqualToString:@"BLUE"]){
NSLog(@"pin color3:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorPurple];
}
return pinView;
//[pinView release];
}
2 ответа
Решение
Я также использую различные цветные булавки на карте. Я использую приведенный ниже код. Я могу видеть 3 разных цвета булавки. Я работаю на iOS6, поэтому я предлагаю протестировать этот код на iOS6.
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{ static NSString *identifier = @"myPin";
MKPinAnnotationView *pinView = nil;
pinView = (MKPinAnnotationView *)[map_View dequeueReusableAnnotationViewWithIdentifier:identifier];
if (pinView == nil)
{
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
pinView.canShowCallout = YES;
pinView.animatesDrop = YES;
}
if([m_pinColor isEqualToString:@"Red"]) {
[pinView setPinColor:MKPinAnnotationColorRed];
}
else if([m_pinColor isEqualToString:@"Green"]){
[pinView setPinColor:MKPinAnnotationColorGreen];
}
else if([m_pinColor isEqualToString:@"Purple"]){
[pinView setPinColor:MKPinAnnotationColorPurple];
}
return pinView;
}
Поместите следующий код вне оператора if. В противном случае при повторном использовании булавки следующий код не будет вызван.
if([m_pinColor isEqualToString:@"RED"]) {
NSLog(@"pin color1:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorPurple];
}
else if([m_pinColor isEqualToString:@"GREEN"]){
NSLog(@"pin color2:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorGreen];
}
else if([m_pinColor isEqualToString:@"BLUE"]){
NSLog(@"pin color3:%@",m_pinColor);
[pinView setPinColor:MKPinAnnotationColorRed];
}