代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

iPhone核心位置:为自定义pin图像区分pin

  •  3
  • Oh Danny Boy  · 技术社区  · 14 年前

    我正在使用

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

    为自定义pin绘制自己的图像。我想使用不同的图像为不同的引脚。我想知道如何区分哪个pin调用了这个函数。

    - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
    
        MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyPin"];
        annView.canShowCallout = YES;
    
        annView.calloutOffset = CGPointMake(-5, 5);
    
        if ([annView.annotation.title isEqualToString:myLocation]) {
            UIImage *pinImage = [UIImage imageNamed:@"myLocationImage.png"];
            [annView setImage:pinImage];
        } else {
            UIImage *pinImage = [UIImage imageNamed:@"resImage.png"];
            [annView setImage:pinImage];
        }
    
        return annView;
    }
    

    编辑: 在一个新项目中重温这一点时,我意识到创建不同的pin类是一种浪费。更好的实现是设置pin类型,然后从MKAnnotationView的注释中读取它。下面的例子。

    - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>) annotation {
    
        MKPinAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"PinID"];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [button addTarget:self action:@selector(viewStoreDetails:) forControlEvents:UIControlEventTouchDown];
    
        pin.rightCalloutAccessoryView = button;
        pin.canShowCallout = YES;
        pin.calloutOffset = CGPointMake(-5, 5);
    
        Annotation *a = (Annotation *)pin.annotation;
    
        int i = a.locationType;
    
        switch (i) {
            case RETAIL:
                pin.image = [UIImage imageNamed:@"pin_retail.png"];
                break;
            case OUTLET:
                pin.image = [UIImage imageNamed:@"pin_outlet.png"];
                break;
            case COMING_SOON:
                pin.image = [UIImage imageNamed:@"pin_coming_soon.png"];
                break;
            case MY_LOCATION:
                pin.image = [UIImage imageNamed:@"pin_my_location.png"]; 
                break;
                pin.image = [UIImage imageNamed:@"pin_retail.png"];
            default:
                break;
        }
    
        return [pin autorelease];
    }
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Oh Danny Boy    14 年前

    annView.annotation.title我成功了。