невозможно показать 2 цвета в mapkit - PullRequest
1 голос
/ 21 июня 2011

ок отчаяние. Это убивает меня .. Я совершенно не понимаю MapKit вообще .. Несмотря на то, что прочитал очень много учебника .. = (

Для получения дополнительной информации у меня есть 2 класса аннотаций - MyAnnotation и MyAnnotation2, похоже, что он тоже не работает.

- (void)viewWillAppear:(BOOL)animated
{

[super viewWillAppear:animated];


_annotations = [[NSMutableArray alloc] init];
_annotation2 = [[NSMutableArray alloc] init];

CLLocation *userLoc = _mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);


_listOfPolyClinics = [[NSMutableArray alloc] init];
_listOfPatients = [[NSMutableArray alloc] init ];



for (PolyClinics *polyclinics in [[PatientDatabase database] 
                                  polyClinics]){
    [_listOfPolyClinics addObject:polyclinics];
}
NSLog(@"%i", [_listOfPolyClinics count]);

for (PatientDetails *patientDetails in [[PatientDatabase database] 
                                        patientCategoryList:_category]){
    [_listOfPatients addObject:patientDetails];
}

NSLog(@"%i", [_listOfPatients count]);




for (PolyClinics *polyclinics in _listOfPolyClinics){
    MyAnnotation * myAnnotation =[[MyAnnotation alloc] init];

    CLLocationCoordinate2D theCoordinate;
    theCoordinate.longitude = polyclinics.longtitude;
    theCoordinate.latitude = polyclinics.latitude;

    myAnnotation.pinColor = MKPinAnnotationColorPurple;
    myAnnotation.coordinate = theCoordinate;
    myAnnotation.title = polyclinics.name;
    myAnnotation.subtitle = [NSString stringWithFormat:@"%i",polyclinics.telephone];
    //myAnnotation.annotationsPatients = 

    [_mapView addAnnotation:myAnnotation];
    [_annotation2 addObject:myAnnotation];
}

for(PatientDetails *patientDetails in _listOfPatients){
    MyAnnotation2 * myAnnotation =[[MyAnnotation2 alloc] init];

    CLLocationCoordinate2D theCoordinate;
    theCoordinate.longitude = patientDetails.longitude;
    theCoordinate.latitude = patientDetails.latitude;

    myAnnotation.pinColor = MKPinAnnotationColorGreen;
    myAnnotation.coordinate = theCoordinate;
    myAnnotation.title = patientDetails.nric;
    myAnnotation.subtitle = [NSString stringWithFormat:@"%i",patientDetails.category];

    [_mapView addAnnotation:myAnnotation];
    [_annotation2 addObject:myAnnotation];
}

}

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

NSLog(@"%i", [_annotation2 count]);
    MKPinAnnotationView *pinView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:[annotation title]];

    for(id <MKAnnotation> a in _annotation2){


        if([a isKindOfClass:[MyAnnotation class]]){
        pinView.pinColor = MKPinAnnotationColorPurple;
        }
        else{
            pinView.pinColor = MKPinAnnotationColorGreen;
        }
        pinView.animatesDrop=NO;
        pinView.canShowCallout=YES;
        return [pinView autorelease];



    }
    return pinView;

}

1 Ответ

2 голосов
/ 21 июня 2011
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

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

Также хорошей практикой является использование

- (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier;

чтобы AnnotationViews не создавались заново с нуля, особенно с точки зрения памяти!

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    BOOL isGreen = YES;
    if([annotation isKindOfClass:[MyAnnotation class]])
         isGreen = NO;

    MKPinAnnotationView *pinView = nil;

    if (isGreen) {
        static NSString *greenPin = @"greenPin";
        pinView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:greenPin];
        if (!pinView) {
             pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:greenPin] autorelease];
             pinView.pinColor = MKPinAnnotationColorGreen;
             pinView.animatesDrop = NO;
             pinView.canShowCallout = YES;
        }
        else
            pinView.annotation = annotation;

    }
    else {
        static NSString *purplePin = @"purplePin";
        pinView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:purplePin];
        if (!pinView) {
             pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:purplePin] autorelease];
             pinView.pinColor = MKPinAnnotationColorPurple;
             pinView.animatesDrop = NO;
             pinView.canShowCallout = YES;
        }
        else
            pinView.annotation = annotation;
    }


    return pinView;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...