2010-08-26 106 views
3

销我使用iPhone核心位置:区分自定义图钉图像

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

画我自己的形象自定义针。我想为不同的针脚使用不同的图像。我想知道如何区分哪个引脚正在调用此函数。

- (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; 
} 

编辑:重温这个新项目,我意识到创建不同的针类是浪费的。更好的实现方法是设置引脚类型,然后将其从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]; 
} 

回答

3

annView.annotation.title取得了诀窍。