MKOverlay不会在iOS7上再次渲染

时间:2014-01-24 06:28:29

标签: ios7 mkannotation mkoverlay

我有一个地图视图,上面有注释。对于每个注释,我需要显示一个只是一个圆圈的叠加层。根据值,该圆需要是两种不同颜色中的一种。用户可以在屏幕上选择其他内容,并且需要删除所有注释和叠加层,并且需要根据新选择的项目添加新的注释和叠加层。

第一次加载具有地图视图的控制器时,一切都很好。当用户选择新项目时,将删除旧注释和叠加层,并添加新注释和叠加层,但不会显示叠加层。当我输入断点时,我没有看到mapview:rendererForOverlay方法在用户选择新项目后被调用。以下是我正在使用的代码:

在viewDidLoad中,我有以下内容:

_mapview.delegate = self;
[self placePinsOnMap];

placePinsOnMap:方法具有以下内容:

- (void)placePinsOnMap {
    AMapAnnotation* annotation;

    for (APlace* place in _selectedItem.places) {
        annotation = [[AMapAnnotation alloc] initWithTitle:place.name subtitle:place.subtitle coordinate:place.location];
        annotation.object = place;

        [_mapview addAnnotation:annotation];
        [_mapview addOverlay:[[AMapOverlay alloc] initWithCenterCoordinate:place.location radius:[_place.size floatValue]*1000 object:place] level:MKOverlayLevelAboveRoads];
    }
}

每次添加叠加层时,都会调用mapview:rendererForOverlay。这看起来像这样:

- (MKOverlayRenderer*)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    MKCircleRenderer* circleRenderer;
    AMapOverlay* mapOverlay;
    APlace* place;

    mapOverlay = (AMapOverlay*)overlay;
    place = mapOverlay.object;

    circleRenderer = [[MKCircleRenderer alloc] initWithCircle:mapOverlay];
    if ([place.radius floatValue] >= 5 && [place.radius floatValue] <= 10) {
        circleRenderer.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.2];
    } else {
        circleRenderer.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
    }

    return circleRenderer;
}

当用户选择新项目时,我会删除所有注释和叠加层,并为所选的新项目添加新注释及其叠加层:

- (void)onScrollviewTap:(UITapGestureRecognizer*)recognizer {
    CGPoint point;

    point = [recognizer locationInView:_scrollview];

    for (ACard* card in _cards) {
        if (CGRectContainsPoint(card.frame, point)) {
            card.selected = YES;
            _selectedItem = card.item;
            NSArray* array = [_mapview annotations];
            for (id<MKAnnotation> annotation in array) {
                if (annotation != _userAnnotation) {
                    [_mapview removeAnnotation:annotation];
                }
            }

            [_mapview removeOverlays:[_mapview overlays]];
            [self placePinsOnMap];
        } else {
             card.selected = NO;
        }
    }
}

AMapOverlay类是MKCircle的子类,只是保存坐标,半径值和一个位置对象,用于确定叠加应该是什么颜色。我在AMapOverlay类中重写了boundingMapRect:

- (MKMapRect)boundingMapRect {
    MKMapPoint upperLeft = MKMapPointForCoordinate(self.coordinate);
    MKMapRect bounds = MKMapRectMake(upperLeft.x, upperLeft.y, self.radius*2, self.radius*2);
    return bounds;
}

重申我的问题是:第一次加载具有地图视图的控制器时,一切都很好。我看到了注释以及它们的叠加层。当用户选择新项目时,将删除旧注释和叠加,并且新注释将与叠加层一起添加,但不会显示叠加层。

有没有人知道为什么会这样?

0 个答案:

没有答案