5

我有MKMapView一个非常奇怪的问题,很难解释。我有一个MKOverlay通过将覆盖点保存到文件并将覆盖加载到viewDidLoad. 所以问题来了:

脚步

  1. 我添加MKOverlay一个MKMapView
  2. 在添加MKOverlay到地图后的第二次或第三次运行时,地图上的所有内容都会被与我添加的颜色相同的叠加层覆盖。地图上的所有内容,加载视图时可以看到的地图视图除外。

其他奇怪的事情:

  1. 此问题仅在mapView.showsUserLocation设置为 true时出现
  2. 此问题仅发生在iOS5. 一切正常iOS6
  3. 如果您缩小彩色叠加层,则会重新调整地图可见部分的大小,以在您缩小到的新级别填充地图。

这个人也有同样的问题,尽管他的解决方案对我不起作用。

使用 MKPolyline 和 MKPolylineView 覆盖问题

这是我的一些代码:

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

    MKPinAnnotationView *pinView = nil; //switch this to MKAnnotationView and use .image property if pins need to be images

     if(annotation == self.startingPin || annotation == self.endingPin){

        static NSString *defaultPinID = @"com.MagnusDevelopment.pin";

        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

        if (pinView == nil)pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        pinView.canShowCallout = YES;
        pinView.animatesDrop = TRUE;

        if(annotation == self.startingPin){
        //starting pin
            pinView.pinColor = MKPinAnnotationColorGreen;
        }else{
        //ending pin
            pinView.pinColor = MKPinAnnotationColorRed;
        }

    }
    return pinView;
}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];
    aView.lineWidth = 7.0;
    aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];
    return aView;
}

加载视图时调用的代码,我已经记录了在添加之前添加到折线数组的坐标,一切都很好,花花公子!

    NSInteger numberOfSteps = pointsArray.count;

    NSLog(@"number of steps: %i",numberOfSteps);

    CLLocationCoordinate2D coordinates[numberOfSteps];
    for (NSInteger index = 0; index < numberOfSteps; index++) {
        CLLocation *location = [pointsArray objectAtIndex:index];
        CLLocationCoordinate2D coordinate = location.coordinate;
        coordinates[index] = coordinate;
    }
    MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
    [self.mainMap addOverlay:polyLine];

这是当覆盖出现并且用户在地图上平移到一侧时发生的情况的图片: 在此处输入图像描述 关于问题是什么的任何想法?

4

2 回答 2

1

您正在使用 dequeueReusableAnnotationViewWithIdentifier,但仅当 dequeueReusableAnnotationViewWithIdentifier 的结果为 nil 时,您才将注释分配给 pinView。

由于该方法通常会返回一个现有的 MKPinAnnotationView 实例,因此应该改为:

MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pin == nil) {
    pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
} else {
    pin.annotation = annotation;
}
于 2013-03-01T05:47:03.403 回答
0

这可能是问题所在:当地图视图尝试访问用户当前位置的视图时,您正在传递您的自定义视图。

尝试将其添加到您现有的实现中。

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

if ([annotation isKindOfClass:[MKUserLocation class]]) {
    return nil;     
}
return yourView;
}

PS:这可能不是叠加视图的问题。

最好的祝福。

于 2013-03-06T06:55:55.480 回答