我的应用程序中有三个注释数组,foodannotations,gasannotations和shoppingannotations。我希望每个注释数组都显示不同颜色的引脚。我目前正在使用
- (MKAnnotationView *)mapView:(MKMapView *)sheratonmap viewForAnnotation:(id<MKAnnotation>)annotation {
NSLog(@"Welcome to the Map View Annotation");
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* AnnotationIdentifier = @"Annotation Identifier";
MKPinAnnotationView* pinview = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
pinview.animatesDrop=YES;
pinview.canShowCallout=YES;
pinview.pinColor=MKPinAnnotationColorPurple;
UIButton* rightbutton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightbutton setTitle:annotation.title forState:UIControlStateNormal];
[rightbutton addTarget:self action:@selector(showDetails) forControlEvents:UIControlEventTouchUpInside];
pinview.rightCalloutAccessoryView = rightbutton;
return pinview;
}
如何将其设置为为每个注释数组使用三种不同的引脚颜色。
谢谢!
答案 0 :(得分:6)
您是否定义了一个实现MKAnnotation
协议的自定义类,在该协议中添加了一些属性来标识它是什么类型的注释?或者您是否定义了三个单独的类(每种类型的注释一个)来实现MKAnnotation
?
假设您已经在注释类中定义了一个注释类,其中有一个名为int
的{{1}}属性,那么您可以在annotationType
中执行此操作:
viewForAnnotation
其他几件事:
dequeueReusableAnnotationViewWithIdentifier:
方法calloutAccessoryControlTapped
,而不是使用addTarget:action和自定义方法来处理标注按钮。在该委托方法中,您可以使用int annType = ((YourAnnotationClass *)annotation).annotationType;
switch (annType)
{
case 0 : //Food
pinview.pinColor = MKPinAnnotationColorRed;
case 1 : //Gas
pinview.pinColor = MKPinAnnotationColorGreen;
default : //default or Shopping
pinview.pinColor = MKPinAnnotationColorPurple;
}
。答案 1 :(得分:2)
我建议您创建自定义MKAnnotation
并拥有自定义属性(最可能是typedef枚举)以区分不同类型的注释。
typedef enum {
Food,
Gas,
Shopping
} AnnotationType
之后,您可以有条件地设置颜色if (annotation.annotationType == Food) { set pinColor }
当然,您可以使用AnnotationType
的switch语句来获得更清晰的代码:
switch(annotation.annotationType) {
case Food:
do something;
break;
case Gas:
do something;
break;
case Shopping:
do something;
break;
}
有关添加更多颜色的更多信息,请参阅以下问题(如果您希望稍后扩展应用):
MKPinAnnotationView: Are there more than three colors available?
以下是tutorial显示重大修改的代码段:
calloutMapAnnotationView.contentHeight = 78.0f;
UIImage *asynchronyLogo = [UIImage imageNamed:@"asynchrony-logo-small.png"];
UIImageView *asynchronyLogoView = [[[UIImageView alloc] initWithImage:asynchronyLogo] autorelease];
asynchronyLogoView.frame = CGRectMake(5, 2, asynchronyLogoView.frame.size.width, asynchronyLogoView.frame.size.height);
[calloutMapAnnotationView.contentView addSubview:asynchronyLogoView];
HTH