多个注释阵列,每个阵列的不同引脚颜色?

时间:2011-08-16 19:48:13

标签: iphone ios annotations mkmapview

我的应用程序中有三个注释数组,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;
}

如何将其设置为为每个注释数组使用三种不同的引脚颜色。

谢谢!

2 个答案:

答案 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