Вы перебираете свой массив типов событий для каждой аннотации, предположительно всегда заканчивая изображением, связанным с последним в eventTypeArray
.
Вместо этого вы хотите, чтобы «тип события» был свойство аннотации. Затем при создании представления аннотации вы можете посмотреть на тип события аннотации, чтобы узнать, какое изображение использовать.
Итак, во-первых, вы еще этого не сделали, у вас будет аннотация с eventType
свойство:
typedef NS_ENUM(NSUInteger, EventType) {
EventTypeSmiley,
EventTypeDollar,
EventTypeDonation,
};
@interface EventAnnotation: MKPointAnnotation
@property (nonatomic) EventType eventType;
@end
@implementation EventAnnotation
@end
Теперь, в этом случае, я использую перечисление для моих типов событий, но вы можете использовать любой тип, который хотите. (Даже если вы придерживаетесь массива типов событий, я все равно использовал бы перечисление для удаления значений crypti c 0/1/2, разбросанных по всему коду.)
Затем, когда вы добавляете аннотации к вашему карта, используйте этот новый тип аннотации, а не MKPointAnnotation
:
EventAnnotation *eventAnnotation = [[EventAnnotation alloc] init];
eventAnnotation.coordinate = coordinate;
eventAnnotation.title = @"Fund raiser";
eventAnnotation.eventType = EventTypeDollar;
Теперь, когда все ваши аннотации EventAnnotation
, вы можете сделать так, чтобы ваш viewForAnnotation
действовал соответственно:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
NSAssert([annotation isKindOfClass:[EventAnnotation class]], @"Was expecting event annotation”); // obviously, handle non-EventAnnotation annotations however you want, but I’m going to catch failures for now
static NSString *identifier = @"EventAnnotation";
MKAnnotationView *annotationView = [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!annotationView) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.canShowCallout = YES;
} else {
annotationView.annotation = annotation; // don't forget this line!
}
EventAnnotation *eventAnnotation = (EventAnnotation *)annotation;
switch (eventAnnotation.eventType) {
case EventTypeSmiley:
annotationView.image = [UIImage imageNamed:@"smiley.png"];
break;
case EventTypeDollar:
annotationView.image = [UIImage imageNamed:@"dollar1.png"];
break;
case EventTypeDonation:
annotationView.image = [UIImage imageNamed:@"donation.png"];
break;
}
return annotationView;
}