2016-02-26 2 views
1

Я разрабатываю приложение, которое использует MKMapView. У меня есть несколько аннотаций. Теперь я хочу отобразить пользовательское изображение аннотации для pin. Я создал собственный класс для MapViewAnnotation.Показать динамический штифт аннотации в mapview

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 

@interface MapViewAnnotation : NSObject <MKAnnotation> 

@property (nonatomic,copy) NSString *title; 
@property (nonatomic,copy) NSString *subtitle; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

-(id) initWithTitle:(NSString *) title SubTitle:(NSString *)subtitle AndCoordinate:(CLLocationCoordinate2D)coordinate; 

@end 

#import "MapViewAnnotation.h" 

@implementation MapViewAnnotation 

@synthesize coordinate=_coordinate; 
@synthesize title=_title; 

-(id) initWithTitle:(NSString *) title SubTitle:(NSString *)subtitle AndCoordinate:(CLLocationCoordinate2D)coordinate; 
{ 
    self = [super init]; 
    _title = title; 
    _coordinate = coordinate; 
    _subtitle = subtitle; 
    return self; 
} 

@end 

Я получаю множественные латы длиной от API и отображения такого путем:

[self.map_parking addAnnotations:[self createAnnotations]]; 

- (NSMutableArray *)createAnnotations 
{ 
    NSMutableArray *annotations = [[NSMutableArray alloc] init]; 

    for (NSDictionary *row in arrfinal) { 
     NSNumber *latitude = [row objectForKey:@"latitude"]; 
     NSNumber *longitude = [row objectForKey:@"longitude"]; 
     NSString *title = [row objectForKey:@"title"]; 
     NSString *subtitle = [row objectForKey:@"subtitle"]; 
     NSString *rate = [row objectForKey:@"rate"]; 

     //Create coordinates from the latitude and longitude values 
     CLLocationCoordinate2D coord; 
     coord.latitude = latitude.doubleValue; 
     coord.longitude = longitude.doubleValue; 

     MapViewAnnotation *annotation = [[MapViewAnnotation alloc] initWithTitle:title SubTitle:subtitle AndCoordinate:coord]; 

     MKAnnotationView *av = [map_parking viewForAnnotation:annotation]; 
     if ([rate isEqualToString:@"0.00"]) 
     { 
      av.image = [UIImage imageNamed:@"marker2"]; 
     } 
     else 
     { 
      av.image = [UIImage imageNamed:@"marker"]; 
     } 
     [annotations addObject:annotation]; 

    } 
    return annotations; 
} 

Чтобы отобразить аннотацию я использую эту ссылку метода по этой ссылке: MKMapView: Instead of Annotation Pin, a custom view

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKAnnotationView *pinView = nil; 
    if(annotation != map_parking.userLocation) 
    { 
     static NSString *defaultPinID = @"com.invasivecode.pin"; 
     pinView = (MKAnnotationView *)[map_parking dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
     if (pinView == nil) 
      pinView = [[MKAnnotationView alloc] 
         initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 

     pinView.canShowCallout = YES; 
     //pinView.animatesDrop = YES; 
     for (int i=0; i<arrrates.count; i++) 
     { 
      if ([[arrrates objectAtIndex:i] isEqualToString:@"0.00"]) 
      { 
       pinView.image = [UIImage imageNamed:@"marker1"]; 
      } 
      else if ([[arrrates objectAtIndex:i] isEqualToString:@"100.71"]) 
      { 
       pinView.image = [UIImage imageNamed:@"marker2"]; 
      } 
      else 
      { 
       pinView.image = [UIImage imageNamed:@"marker3"]; 
      } 
     } 

    } 
    else { 
     [map_parking.userLocation setTitle:@"I am here"]; 
    } 

    return pinView; 
} 

В этом методе if-else состояние хорошее состояние, но все изображение на пальце изображение, который был последним состоянием.

+0

положил вас за цикл из if (pinView == nil). если предполагается, что блок допускает только повторное использование примечания для аннотации и будет работать только один раз, если объект-штырь уже существует. – Pawan

+0

@pawan спасибо ... ваш ответ работает http://stackoverflow.com/questions/22259427/change-map-pin-color-or-image Пожалуйста, поместите этот ответ в мой вопрос, чтобы я мог его принять. –

ответ

1

Помещенного за петлю из

if (pinView == nil) 

если блок предполагает, чтобы сделать многоразовую аннотации булавки только & будет выполняться только один раз, если объект штырькового уже существует.

+0

, пожалуйста, помогите мне на этом http://stackoverflow.com/questions/36330331/route-is-not-displaying-in-map –

Смежные вопросы