根据对象的位置,使用不同的图像向MKMapView添加注释

时间:2016-03-09 11:35:24

标签: ios mkmapview mkannotationview

我现在一直在寻找一个关于如何添加注释的好教程,给出一个包含对象位置和图像的类(在我的例子中,对象被称为EVENT)。

查看我到目前为止所做的工作,我从viewDidLoad中调用此方法 setupAnnotations

- (void)setupAnnotations {

    _allEvents = [EventEntity MR_findAll];

    for (EventEntity *event in _allEvents) {

        AVEventAnnotationView *annotation = [[AVEventAnnotationView alloc] initWithOperator:event];

        CLLocation *eventLocation = [[CLLocation alloc] initWithLatitude:[[event latitude] doubleValue] longitude:[[event longitude] doubleValue]];
        annotation.coordinate = eventLocation.coordinate;

        MKPlacemark *eventPlacemark = [[MKPlacemark alloc] initWithCoordinate:eventLocation.coordinate addressDictionary:nil];
        MKMapItem *eventItem = [[MKMapItem alloc] initWithPlacemark:eventPlacemark];

        // Im loading image from URL for or based on event object
        UIImageView *imageContainer = [[UIImageView alloc] init];
        [imageContainer sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",fullBannerImgPath,[event bannerImg]]]];
        [_bannerImagesArray addObject:imageContainer];

        BOOL hasAnnotation = NO;
        for (AVEventAnnotationView *ann in self.mapView.annotations) {
            if([ann isKindOfClass:[AVEventAnnotationView class]])
            {
                if([[annotation.eventEntity dataId] isEqualToString:[ann.eventEntity dataId]])
                {
                    hasAnnotation = YES;
                    break;
                }
            }
        }

        if(!hasAnnotation)
            [self.mapView addAnnotation:annotation];
    }
}

这是我的mapview代表:

- (MKAnnotationView *)mapView:(MKMapView *)mapViewIn viewForAnnotation:(id <MKAnnotation>)annotation {
    if (mapViewIn != self.mapView || [annotation isKindOfClass:[MKUserLocation class]]) {
        return nil;
    }

    static NSString *annotationIdentifier = @"SPGooglePlacesAutocompleteAnnotation";
    MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];

    // STUCK HERE
    annotationView.image = [UIImage imageNamed:@"LocationBlue"];
    annotationView.frame = CGRectMake(0, 0, 80, 80);
    annotationView.draggable = NO;
    annotationView.canShowCallout = YES;

    return annotationView;
}

我是实施MKMapView的新手。我刚刚读过注释和注释视图之间的区别。

无论如何,回到我的主要问题或我的主要问题:如何将注释/注释视图放到mkmapview给定我有一系列具有纬度,经度和图像的事件?

1 个答案:

答案 0 :(得分:0)

我不知道AVAnnotationView是什么,但我会说你不需要它。您只需要使您的Event类符合MKAnnotation协议,即将CLLocationCoordinate2D类型的属性坐标添加到Event类。在此之后,只需使用addAnnotations将事件添加到地图中。

在mapView:viewForAnnotation中:您确定正在显示的注释是什么(正在显示的事件是什么),因此您可以获得要显示的图像(您可以使用标记或任何其他方法)和设置注释视图的图像。

或者您只是说:

if event = annotation as? AVEventAnnotationView { 
//add your image and do stuff
}