MKMapView Off Screen Annotation Image Incorrect

后端 未结 1 721
旧时难觅i
旧时难觅i 2021-01-24 12:15

I have a map to which I add several annotations, like so:

    for (Users *user in mapUsers){

        double userlat = [user.llat doubleValue];
        double us         


        
相关标签:
1条回答
  • 2021-01-24 12:55

    The dequeueReusableAnnotationViewWithIdentifier may return an annotation view that was used for an annotation different from the current annotation parameter.

    If the dequeueReusableAnnotationViewWithIdentifier is succesful (ie. you're using a previously-used annotation view), you must update its annotation property to be sure the view matches the current annotation's properties.

    So try changing this part:

    MKAnnotationView *annView = (MKAnnotationView *)[self.mainMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (!annView) {
        annView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:identifier];
    }
    MapAnnotationViewController *sac = (MapAnnotationViewController *)annView.annotation;
    

    to:

    MKAnnotationView *annView = (MKAnnotationView *)[self.mainMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (!annView) {
        annView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:identifier];
    }
    else {
        annView.annotation = annotation; // <-- add this
    }
    
    MapAnnotationViewController *sac = (MapAnnotationViewController *)annView.annotation;
    


    Another potential issue (not causing the problem in the question) is that the view's image property is only set if relationshipParam is one of three values.

    If somehow relationshipParam is not one of those three coded values and the view was dequeued, the image will be based on some other annotation's relationshipParam.

    So you should add an else part to the section that sets image and set it to some default image just in case:

    ...
    else if ([sac.relationshipParam isEqualToString:@"paramC"])
    {
        annView.image = [UIImage imageNamed:@"image3.png"];
    }
    else
    {
        annView.image = [UIImage imageNamed:@"UnknownRelationship.png"];
    }
    
    0 讨论(0)
提交回复
热议问题