2015-10-22 3 views
0

Я отчасти новичок в кодировании, около 4 недель опыта, так что легко на меня.Разный цвет MKPinAnnotationColor, зависящий от времени

В основном я хочу показать зеленый контакт на карте в течение заданного времени, и когда это не так, будет показан красный контакт.

В настоящее время с кодом для установки двух разных контактов, отображаемых в указанное время, работает, однако у меня возникают проблемы с реализацией другого цветного булавки для каждого экземпляра.

Annotation.h

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

@interface Annotation : NSObject <MKAnnotation> { 

} 

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

@end 

Annotation.m

#import "Annotation.h" 

@implementation Annotation 
@synthesize coordinate,title,subtitle; 

@end 

MapViewController.h

#import <UIKit/UIKit.h> 
#import <iAd/iAd.h> 
#import <MapKit/MapKit.h> 
#import <CoreLocation/CoreLocation.h> 

@interface MapViewController : UITableViewController <MKMapViewDelegate, CLLocationManagerDelegate, MKAnnotation> { 


    IBOutlet UILabel *currentDate; 
    NSString *todaysDate; 

    MKMapView *mapView; 
} 

@property (strong,nonatomic) IBOutlet MKMapView *mapView; 

@end 

MapViewController.m

#import "MapViewController.h" 
#import "SWRevealViewController.h" 
#import <MapKit/MapKit.h> 
#import <CoreLocation/CoreLocation.h> 
#import "Annotation.h" 


@interface MapViewController() 

@end 

@implementation MapViewController { 
} 

@synthesize mapView; 

- (void)viewDidLoad { 

    self.mapView.delegate = self; 

    NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setLocale:locale]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    [formatter setDateFormat:@"EEEE HH:mm"]; 
    todaysDate = [formatter stringFromDate:[NSDate date]]; 
    currentDate.text = todaysDate; 

    [super viewDidLoad]; 

    //Annotations 
    NSMutableArray * locations = [[NSMutableArray alloc] init]; 
    CLLocationCoordinate2D location; 
    Annotation *myAnn; 

//Area 
    //Venue 
    if (
     //Mon 
     [todaysDate containsString: @"Monday 17"] || [todaysDate containsString: @"Monday 18"] || 
     //Tues 
     [todaysDate containsString: @"Tuesday 17"] || [todaysDate containsString: @"Tuesday 18"] || 
     //Weds 
     [todaysDate containsString: @"Wednesday 17"] || [todaysDate containsString: @"Wednesday 18"] || 
     //Thurs 
     [todaysDate containsString: @"Thursday 17"] || [todaysDate containsString: @"Thursday 18"] || 
     //Fri 
     [todaysDate containsString: @"Friday 17"] || [todaysDate containsString: @"Friday 18"] || 
     //Sat 
     [todaysDate containsString: @"Saturday 17"] || [todaysDate containsString: @"Saturday 18"] || 
     //Sun 
     [todaysDate containsString: @"Sunday 17"] || [todaysDate containsString: @"Sunday 18"] 
     ) 
    { 
     //Green 
     myAnn = [[Annotation alloc] init]; 
     location.latitude = 51.4; 
     location.longitude = -0.1; 
     myAnn.coordinate = location; 
     myAnn.title = @"Venue 1"; 
     myAnn.subtitle = @"Subtitle 1"; 
     [locations addObject:myAnn]; 
     [self.mapView addAnnotations:locations]; 
     //Green 
    } else { 
     //Red 
     myAnn = [[Annotation alloc] init]; 
     location.latitude = 51.4; 
     location.longitude = -0.1; 
     myAnn.coordinate = location; 
     myAnn.title = @"Venue 1"; 
     myAnn.subtitle = @"Subtitle 1"; 
     [locations addObject:myAnn]; 
     [self.mapView addAnnotations:locations]; 
     //Red 
} 

@end 

Я понимаю, что я должен использовать (в MapViewController.m):

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

Но затем получить совершенно потерял ... Я попытался переименовать второй штырьковый нечто иное, чем myAnn и установка MKPinAnnotationColorRed или MKPinAnnotationColorGreen зависит от имени но не мог понять это.

Если бы кто-нибудь мог пролить свет на это, я был бы очень благодарен.

Приветствие ребятам

+0

Пожалуйста заканчивать http://stackoverflow.com/help/mcve. – Mathemats

ответ

0

Двое из двух разных аннотаций должны иметь специальное свойство в классе Annotation. тег

 //Green 
     myAnn = [[Annotation alloc] init]; 
myAnn.tag = 0; 
     location.latitude = 51.4; 
     location.longitude = -0.1; 
     myAnn.coordinate = location; 
     myAnn.title = @"Venue 1"; 
     myAnn.subtitle = @"Subtitle 1"; 
     [locations addObject:myAnn]; 
     [self.mapView addAnnotations:locations]; 
     //Green 
    } else { 
     //Red 
     myAnn = [[Annotation alloc] init]; 
    myAnn.tag = 1; 
     location.latitude = 51.4; 
     location.longitude = -0.1; 
     myAnn.coordinate = location; 
     myAnn.title = @"Venue 1"; 
     myAnn.subtitle = @"Subtitle 1"; 
     [locations addObject:myAnn]; 
     [self.mapView addAnnotations:locations]; 
     //Red 

}

затем включите тег

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
    //only handle our Annotations 
    if(![annotation isKindOfClass:[Annotation class]]) 
     return; 

    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"]; 
    pinView.animatesDrop = YES; 
    pinView.canShowCallout = YES; 
    pinView.image = [UIImage imageNamed:@"pizza_slice_32.png"]; 
    pinView.pinColor = MKPinAnnotationColorPurple; 

    if((Annotation.tag == 0)) { 
     pinView.pinColor = MKPinAnnotationColorGreen; 
    } 
    else { 
     pinView.pinColor = MKPinAnnotationColorRed; 
    } 
    return pin; 
} 
+0

Спасибо Daji, это было именно то, что я искал. Я получаю тег «Property», который не найден на объекте типа «Аннотации». Предполагаю, что мне нужно что-то создать в Annotation.h и синтезировать его в Annotation.m. – Darnton

+0

@property (неатомный, назначить) X * tag; – Darnton

+0

Что-то вроде этого? Не уверен, что такое значение X. – Darnton

-1

В MKMapView Делегат «viewForAnnotation» вам необходимо создать новый штифт, используя следующий метод, а затем может изменить цвет соответственно.

MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"]; 
pinView.animatesDrop = YES; 
pinView.canShowCallout = YES; 
pinView.image = [UIImage imageNamed:@"pizza_slice_32.png"]; 
pinView.pinColor = MKPinAnnotationColorPurple; 
+0

IMHO это не отвечает на его вопрос о различии между двумя аннотациями. –

+0

Если вам нужно проверить разные аннотации, то в том же методе делегата вы можете сделать проверку, как показано ниже, а затем установить цвет булавки соответственно ........ .... if (annotation.coordinate.latitude == 42.0000 && annotation.coordinate.longitude == - 87.65000) –

+0

в случае op различные аннотации совпадают, за исключением времени. поэтому ему нужна новая собственность –

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