开发者

impossible to show 2 colors in mapkit

开发者 https://www.devze.com 2023-03-14 03:42 出处:网络
ok desperation. This is killing me.. I totally do not understand MapKit at all.. Despite reading so many tutorial.. =(

ok desperation. This is killing me.. I totally do not understand MapKit at all.. Despite reading so many tutorial.. =(

For more information, I have 2 annotation classes - MyAnnotation and MyAnnotation2, it doesnt seems to work too.. Somebody plz help.. I am afraid I have no hair left soon =(

- (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]);
    MKPinAnno开发者_运维知识库tationView *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;

}


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

is called every time the MKMapView needs to show a view for an annotation, it passes you that annotation for a reason. So instead of iterating through them and returning only the color for the first one in your array (you need to understand that returning from a function/method doesn't let the loop iterate more), use the parameter instead.

Also a good practice is to use

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

so the AnnotationViews don't get created again from scratch, especially memory-wise!

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

精彩评论

暂无评论...
验证码 换一张
取 消