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

时间:2013-02-21 04:36:34

标签: iphone ios mkmapview mkannotation mkoverlay

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

步骤

  1. 我在MKOverlay
  2. 中添加了MKMapView
  3. MKOverlay添加到地图后的第二次或第三次运行 地图上的所有内容都会被相同颜色的叠加层覆盖 正如我所说的那样。除了地图外,地图上的所有内容 加载视图时可以看到的地图视图。
  4. 其他奇怪的事情:

    1. 仅在mapView.showsUserLocation设置为时才会出现此问题 真
    2. 此问题仅发生在iOS5上。一切正常iOS6
    3. 如果缩小彩色叠加层,请重新调整可见部分的大小 地图以缩小您缩小的新级别填充地图。
    4. 这家伙遇到同样的问题,虽然他的解决方案对我不起作用。

      Trouble with overlay using 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];
      

      以下是当叠加层出现并且用户平移到地图侧面时会发生什么情况的图片: enter image description here 关于问题是什么的任何想法?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

尝试在现有实施中添加此内容。

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

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

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

最诚挚的问候。