MKMapView跨越倍增的bug

时间:2010-04-28 15:32:54

标签: mkmapview html mkcoordinateregion

在MKMapView中设置区域偶尔会导致跨度加倍。这个错误似乎出现在地图初始化阶段的早期。虽然已在其他地方报道过我无法找到下降现有的解决方法,所以我在这里发布我的修复程序。它依赖于regionThatFits方法也产生错误的事实。我正在使用iPhone OS 3.12,但该漏洞是在3.0测试版中报告的。此代码位于包含MKMapView的UIViewController中:

    - (BOOL)doubleSpanBugDetected:(MKCoordinateRegion)region fittedRegion:(MKCoordinateRegion)fitted
{
  float latRatio = fitted.span.latitudeDelta / region.span.latitudeDelta;
  float lonRatio = fitted.span.longitudeDelta / region.span.longitudeDelta;
  BOOL latDoubled = (latRatio > 1.8 && latRatio < 2.2); // within 10% of x2
  BOOL lonDoubled = (lonRatio > 1.8 && lonRatio < 2.2); // within 10% of x2
  return latDoubled && lonDoubled;
}

- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated
{
  //fixes setRegion span doubling bug
  // see: http://osmorphis.blogspot.com/2009/12/mapkit-span-doubling-bug.html
  // see: http://www.iphonedevsdk.com/forum/iphone-sdk-development/15810-mkmapview-needs-time-think.html
  MKCoordinateRegion fitted = [self.mapView regionThatFits:region];
  if ([self doubleSpanBugDetected:region fittedRegion:fitted]) {
    MKCoordinateSpan span = MKCoordinateSpanMake(fitted.span.latitudeDelta/2.0, fitted.span.longitudeDelta/2.0);
    MKCoordinateRegion regionHack = MKCoordinateRegionMake(fitted.center, span); 
    [self.mapView setRegion:regionHack animated:animated];     
  } else {
    [self.mapView setRegion:fitted animated:animated];
  }
}

0 个答案:

没有答案