Различие между пользовательской аннотацией и другими аннотациями - PullRequest
0 голосов
/ 06 мая 2011

пожалуйста, я недавно сделал Карту, в которой предполагается показывать местоположение пользователя (зеленый значок булавки) и другие аннотации для станций технического обслуживания (красный значок булавки), на данный момент я могу показать все аннотации того же цвета ия все еще не могу сказать делегату MKMapView, как сделать различие между двумя типами выводов, и поэтому назначаю каждому типу правильный заголовок для отображения.это мой MKAnnotationView метод:

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

    static NSString *identifier = @"MyLocation";   
    if ([annotation isKindOfClass:[MyLocation class]]) {

        MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [map dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (annotationView == nil) {
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        } else {
            annotationView.annotation = annotation;
        }

        annotationView.enabled = YES;
        [annotationView setAnimatesDrop:YES];
        annotationView.canShowCallout = YES;

               return annotationView;
    }

    return nil;    
}

и для моего класса, который реализует делегат MKAnnotation, у меня есть этот метод:

-(id)initWithName:(NSString *)enseigneDeLaStation distanceVersLaStation:(NSString *) distanceVersLaStation coordinate:(CLLocationCoordinate2D)coordinate
{
    if ((self = [super init])) {
        _enseigneDeLaStation = [enseigneDeLaStation copy];
        _distanceVersLaStation = [distanceVersLaStation copy];
        _coordinate = coordinate;
    }
    return self;
}

Заранее спасибо за помощь :)

РЕДАКТИРОВАТЬ Я пытаюсь сделать аннотацию местоположения пользователя, как это, пожалуйста, если я ошибаюсь, исправьте меня:

location2D = (CLLocationCoordinate2D){ .latitude = latitudeOfUserLocation, .longitude = longitudeOfUserLocation };
    MyLocation *annotation=[[[MyLocation alloc]initWithName:@"You are here" distanceVersLaStation:@"" coordinate:location2D]autorelease];
    [mapView addAnnotation:annotation];

РЕДАКТИРОВАТЬ 2 ПриветОпять же, я пытаюсь сделать одну аннотацию, чтобы убедиться, что она даже вызывает метод аннотации, поэтому представьте себе этот простой пример:

latitudeOfUserLocation=43.2923;
    longitudeOfUserLocation=5.45427;
    location2D = (CLLocationCoordinate2D){ .latitude = latitudeOfUserLocation, .longitude = longitudeOfUserLocation };
    MyLocation *annotation=[[[MyLocation alloc]initWithName:@"You are here" distanceVersLaStation:@"coucou" coordinate:location2D]autorelease];
    [mapView addAnnotation:annotation];

    MKCoordinateSpan span={latitudeDelta:1,longitudeDelta:0.5};
    MKCoordinateRegion region={location2D,span};
    [mapView setRegion:region];

, когда я запускаю приложение, я вижу, что регион хорошо увеличен, что соответствует 43.2923 /5.45427 но я не вижу аннотации, почему она не вызывает метод аннотации, я не могу двигаться дальше, так как она не показывает аннотацию пользователя, пожалуйста, помогите, спасибо заранее:)

РЕДАКТИРОВАТЬ3 Привет, я предположил, что это всегда имеет отношение к созданию различий между выводами пользователя и станции, поэтому я объявил переменную codeColor, установил его в 1 (тип пользователя) при вызове аннотаций и установил егодо 2 (тип станции) при вызове аннотаций дляr станции:

-(void)viewWillAppear:(BOOL)animated
{  
       codeColor=1;//it's the first type, the user one
    MyLocation *annotation=[[[MyLocation alloc]initWithName:@"You are right here"   distanceVersLaStation:@"" coordinate:location2D]autorelease];
    annotation.pinColor = MKPinAnnotationColorGreen;  
    [mapView addAnnotation:annotation];

}

и:

-(void)requestFinished:(ASIHTTPRequest *)request
{  codeColor=2;
    [MBProgressHUD hideHUDForView:self.view animated:YES];
    MyLocation *annotation=[[[MyLocation alloc]initWithName:ensStation distanceVersLaStation:distance coordinate:location2D]autorelease];
           annotation.pinColor = MKPinAnnotationColorPurple;  
           [mapView addAnnotation:annotation];


           }

и для метода аннотаций:

if (codeColor==2) {

            annotationView.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];

        }

теперь при первом тестировании все в порядкепользовательская аннотация без кнопки, а станция - с кнопкой, но когда я перехожу из вида и возвращаюсь, все аннотации с кнопками, даже пользовательские.не могли бы вы помочь мне там, спасибо заранее:)

1 Ответ

1 голос
/ 06 мая 2011

Один простой способ - добавить свойство pinColor в ваш класс MyLocation:

@property (nonatomic, assign) MKPinAnnotationColor pinColor;

При создании аннотации установите pinColor:

MyLocation *annotation=[[[MyLocation alloc]initWithName:@"You are here" distanceVersLaStation:@"" coordinate:location2D]autorelease];
annotation.pinColor = MKPinAnnotationColorGreen;  //or red or whatever
[mapView addAnnotation:annotation];

и в методе viewForAnnotation:

//...
annotationView.canShowCallout = YES;
annotationView.pinColor = ((MyLocation *)annotation).pinColor;
...