2013-04-30 33 views
1

正如你可以低于图像中看到的所有注释具有相同的imagediscount这是不正确的,他们应该有不同的imagediscount。我怎样才能解决这个问题?我正在使用discountStr和'imgPathStr'属性和下面的代码的自定义注释类。 enter image description here定制标注有相同的图像

-(void) connectionDidFinishLoading: (NSURLConnection *) connection 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

_adResultDict = [NSJSONSerialization JSONObjectWithData:_adResultData options:kNilOptions error:nil]; 

NSMutableArray *annoArray = [[NSMutableArray alloc]init]; 

NSArray *adArray = [[_adResultDict objectForKey:@"result"]objectForKey:@"ads"]; 

for (int i = 0; i<adArray.count;i++) { 
    NSString *latLongStr = [[adArray objectAtIndex:i]objectForKey:@"area_lat_long"]; 
    NSArray *tempLatLongArray =[ latLongStr componentsSeparatedByString:@","]; 

    CLLocationCoordinate2D adPlace; 
    adPlace.latitude = [[tempLatLongArray objectAtIndex:0] doubleValue]; 
    adPlace.longitude = [[tempLatLongArray objectAtIndex:1]doubleValue]; 
    anno = [[Annotation alloc]init]; 
    anno.title = [[adArray objectAtIndex:i]objectForKey:@"ad_title"]; 
    anno.adDiscountStr = [[adArray objectAtIndex:i]objectForKey:@"discount"]; 
    anno.adPurposeStr = [[adArray objectAtIndex:i]objectForKey:@"ad_tab"]; 
    anno.adImagePathStr = [[adArray objectAtIndex:i]objectForKey:@"image_name"]; 

    anno.coordinate = adPlace; 
    [annoArray addObject:anno]; 


    } 
[searchMapView addAnnotations:annoArray]; 


[searchMapView reloadInputViews]; 
} 

委托方法:

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

MKAnnotationView *pinView = nil; 
if(annotation != mapView1.userLocation) 
{ 
    static NSString *defaultPinID = @"com.invasivecode.pin"; 
    pinView = (MKAnnotationView *)[mapView1 dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinView == nil) 
     pinView = [[MKAnnotationView alloc] 
        initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 

    //pinView.pinColor = MKPinAnnotationColorGreen; 
    pinView.canShowCallout = YES; 
    //pinView.animatesDrop = YES; 
    UIImageView *adImageView = [[UIImageView alloc]initWithFrame:CGRectMake(8, 8, 69, 61)]; 
    adImageView.contentMode =UIViewContentModeScaleToFill; 
    pinView.centerOffset = CGPointMake(0, -45); 
    adImageView.backgroundColor =[UIColor clearColor]; 
    CALayer * l = [adImageView layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:7.0]; 

    UIImageView *adDiscountImageView = [[UIImageView alloc]initWithFrame:CGRectMake(5, -20, 75, 35)]; 
    adDiscountImageView.image = [UIImage imageNamed:@"map-price-tag"]; 
    UILabel *adDiscountLabel = [[UILabel alloc]initWithFrame:CGRectMake(12, 8, 40, 20)]; 
    //adDiscountLabel.center = adDiscountImageView.center; 
    if ([anno.adDiscountStr isEqualToString:@""] ||[anno.adDiscountStr isEqualToString:@"0"]) { 
     adDiscountLabel.text = anno.adPurposeStr; 
    } 
    adDiscountLabel.text = [NSString stringWithFormat:@"%@%%",anno.adDiscountStr]; 
    adDiscountLabel.backgroundColor =[UIColor clearColor]; 
    adDiscountLabel.textColor = [UIColor whiteColor]; 

    pinView.image = [UIImage imageNamed:@"map-pop-up.png"]; 
    [pinView addSubview:adImageView]; 
    [pinView addSubview:adDiscountImageView]; 
    [adDiscountImageView addSubview:adDiscountLabel]; 


//   
    } 
    else { 
     [mapView1.userLocation setTitle:@"Current Location"]; 

    } 
    return pinView; 

} 

回答

2

这是地图视图的常见错误。重要的是要知道,viewForAnnotation独立于您在制作注释的connectionDidFinishLoading方法中调用。当iOS根据它所决定的顺序决定需要它时调用viewForAnnotation。这就是为什么其中一个参数是它需要绘制的注释。在您的代码中,您正在计算adDiscount标签基于anno这是您的循环中的最后一项。相反,你应该使用annotation

+0

谢谢,我做了这个注释* myAnno = [[注解alloc] init]; myAnno =注解; 然后adDiscountLabel.text = [NSString stringWithFormat:@“%@ %%”,myAnno.adDiscountStr];这是正确的方式吗? – 2013-04-30 09:19:30

+0

你的第一行没有意义,因为你用第二行覆盖了这个值。您应该首先检查注释是您期望然后投射它的类,如下所示: 'if([annotation isKindOfClass:[Annotation class]]) {0}注释* myAnno =(Annotation *)注释; ... ... ... }' – Craig 2013-04-30 09:49:18

0

只需添加里面的for循环这种波纹管行..

[searchMapView addAnnotation: anno]; 

评论这种波纹管行..

[searchMapView addAnnotations:annoArray]; 

请参阅示例波纹管..

for (int i = 0; i<[arrJourneyData count]; i++) 
    { 

      MyAnnotation *annTemp=[[MyAnnotation alloc]init]; 
      CLLocationCoordinate2D CLLTemp; 
objectAtIndex:i] floatValue],[[[arrJourneyData valueForKey:@"journeylong"] objectAtIndex:i] floatValue]); 
      CLLTemp.latitude = [[[arrJourneyData valueForKey:@"journeylat"] objectAtIndex:i] floatValue]; 
      CLLTemp.longitude = [[[arrJourneyData valueForKey:@"journeylong"] objectAtIndex:i] floatValue]; 
      annTemp.coordinate = CLLTemp; 
      annTemp.title = [NSString stringWithFormat:@"%d Image of %@",totalrecord,[appDelegate getAddressFromLatLon:[[[arrJourneyData valueForKey:@"journeylat"] objectAtIndex:i] floatValue] withLongitude:[[[arrJourneyData valueForKey:@"journeylong"] objectAtIndex:i] floatValue]]]; 
      annTemp.anntag = i; 
      [mapView addAnnotation:annTemp]; 
      [annTemp release]; 
    } 
+0

试了一下,依然面临着同样的问题 – 2013-04-30 05:25:27

+0

这是工作的罚款在iOS 6.1而不是在iOS 5.1 – 2013-04-30 05:33:08

+0

你的意思是你在iOS 6.1不同的折扣和形象,但不是在IOS 5.1? – 2013-04-30 05:37:38