MKOverlay仅在ios5上覆盖所有奇怪的环境?

Shr*_*794 5 iphone mkmapview mkannotation ios mkoverlay

我有一个MKMapView非常奇怪的问题很难解释.MKOverlay通过将叠加点保存到文件并加载叠加层,我在会话之间保存了一个viewDidLoad.所以这就是问题所在:

脚步

  1. 我添加MKOverlayMKMapView
  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;
}
Run Code Online (Sandbox Code Playgroud)

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

    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];
Run Code Online (Sandbox Code Playgroud)

下面是当叠加层出现并且用户平移到地图侧面时会发生什么情况的图片: 在此输入图像描述 关于问题是什么的任何想法?

poe*_*ain 1

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

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

MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pin == nil) {
    pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
} else {
    pin.annotation = annotation;
}
Run Code Online (Sandbox Code Playgroud)