多个注释数组,每个数组的引脚颜色不同?
Posted
技术标签:
【中文标题】多个注释数组,每个数组的引脚颜色不同?【英文标题】:Multiple Arrays of Annotations, Different Pin Color for Each Array? 【发布时间】:2011-08-16 19:48:13 【问题描述】:我的应用中有三组注释: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;
如何设置它以对每个注释数组使用三种不同的引脚颜色。
谢谢!
【问题讨论】:
【参考方案1】:您是否定义了一个实现MKAnnotation
协议的自定义类,您在其中添加了一些属性来标识它是哪种注释?或者您是否定义了实现MKAnnotation
的三个单独的类(每种注释一个)?
假设您已经定义了一个注释类,其中您的注释类中有一个名为annotationType
的int
属性,那么您可以在viewForAnnotation
中执行此操作:
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;
其他几件事:
您应该使用dequeueReusableAnnotationViewWithIdentifier:
方法
不要使用 addTarget:action 和自定义方法来处理调用按钮按下,而是使用地图视图的委托方法 calloutAccessoryControlTapped
。在该委托方法中,您可以使用view.annotation
访问注释。
【讨论】:
【参考方案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 的代码 sn-p,显示了重大修改:
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
【讨论】:
我有没有办法使用内置的 mkpinannotationview 和 pinview.pincolor=____ 来做到这一点? 是的,您也可以使用MKAnnotationView
的 pinColor 属性来执行此操作。我也用更相关的链接更新了我的问题。
非常感谢!我现在就去处理它!以上是关于多个注释数组,每个数组的引脚颜色不同?的主要内容,如果未能解决你的问题,请参考以下文章
MKPinAnnotationView 的不同颜色取决于时间