Расположение ядра iPhone: Diffferentiate pin для пользовательского изображения pin - PullRequest
3 голосов
/ 26 августа 2010

Я использую

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

1 Ответ

3 голосов
/ 23 ноября 2010

annView.annotation.title сделали свое дело.

...