开发者

MKMapView span doubling bug

Setting the region in MKMapView occasionally results in the span being doubled. This bug seems t开发者_JAVA百科o appear early in the map initialization phase. Although it's been reported elsewhere I wasn't able to find a descent existing workaround, so I'm posting my fix here. It relies on the fact that the regionThatFits method also produces the bug. I'm working with iPhone OS 3.12, but the bug was reported in 3.0 beta. This code lives in the UIViewController that contains your MKMapView:

    - (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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜