2012-12-27 3 views
-1

У меня есть 3 типа местоположений.Различные MKPinAnnotation для разных данных

Я получаю данные с моего сервера, затем я разбираю его и отображаю местоположения на mapView.

Я хочу отображать разные цвета для разных типов данных. 3 типа = 3 цвета.

Как я могу это контролировать?

+0

Попробуйте это, annotation1.subtitle = @ "1 аннотацию"; annotation2.subtitle = @ "2-я аннотация"; annotation3.subtitle = @ "3-я аннотация"; Проверить аннотацию если ([annotation.subtitle isEqualToString: @ "1 аннотацию"]) { // Изменение цвета } еще если ([annotation.subtitle isEqualToString: @ "2ст аннотацию"]) { // изменение цвета } еще если ([annotation.subtitle isEqualToString: @ «3ST аннотации»]) { // изменение цвета } – Kalpesh

ответ

1

Внесите метод делегата viewForAnnotation для этого.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *identifier = @"MyLocation"; 
    if ([annotation isKindOfClass:[yourAnnotationLocation class]]) 
    { 

     MKAnnotationView *annotationView = (MKAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
     if (annotationView == nil) 
     { 
      annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
      annotationView.enabled = YES; 
      annotationView.canShowCallout = YES; 
      //if you need image you can set it like 
      //annotationView.image = [UIImage imageNamed:@"yourImage.png"];//here we use a nice image instead of the default pins 
      annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     } 
     else 
     { 
      annotationView.annotation = annotation; 
     } 
     if ([annotation.title isEqualToString:@"Midhun"]) 
     { 
      annotationView.pinColor = MKPinAnnotationColorGreen; 
     } 
     else 
     { 
      annotationView.pinColor = MKPinAnnotationColorRed; 
     } 
     return annotationView; 
    } 

return nil; 
} 

Для настройки пользовательского свойства в аннотации добавить класс, который подтверждает MKAnnotation протокола.

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

@interface MyLocation : NSObject <MKAnnotation> { 
    NSString *_name; 
    NSString *_address; 
    int _yourValue; 
    CLLocationCoordinate2D _coordinate; 
} 

@property (copy) NSString *name; 
@property (copy) NSString *address; 
@property (assign) yourValue; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate; 

@end 

Это хороший tutorial.

+0

Я не хочу, чтобы проверить, если названия равны, потому что есть много названия. –

+1

@YosiDahan: это пример, вы можете проверить свой тип там –

+0

Тип - это значение, которое имеет каждый объект в массиве. как я могу объявить каждую аннотацию его типом? –

1
Try this, 
annotation1.subtitle = @"1st annotation"; 
    annotation2.subtitle = @"2st annotation"; 
     annotation3.subtitle = @"3st annotation"; 
    Check annotation 
     if ([annotation.subtitle isEqualToString:@"1st annotation"]) 
     { 
      //change color 
     } 
      else if ([annotation.subtitle isEqualToString:@"2st annotation"]) 
      { 
      //change color 
       } 
     else if ([annotation.subtitle isEqualToString:@"3st annotation"]) 
      { 
      //change color 
      } 
1

Вы можете сделать что-то с широтой и долготой сравнения

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { static NSString *identifier = @"yourIdentifier"; 
MKPinAnnotationView *pin = (MKPinAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
if([annotation coordinate].latitude==YourLocationLatitude) 
{ 

    pin.image=[UIImage imageNamed:@"Flag-red.png"]; 
} 
else 
{ 
    pin.image=[UIImage imageNamed:@"Flag-green.png"]; 
}} 
Смежные вопросы