开发者

MKMapView rendering problem on iPad

My problem occurs only on iPad. There is always unrendered portion of MKMapView(right side on the picture below). As soon as I touch this window the mapview repaints itself just fine. But it never renders correctly right away. This problem occures in iOS 4.2 as well as in iOS 3.2 in Simulator and the Device. The code that constructs MKMapView is right below:

- (void)viewDidLoad {
      [super viewDidLoad];  
      mapview = [[[MKMapView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,230)] autorelease]; // because of apples bug
      mapview.autoresizingMask = UIViewAutoresizingFlexibleWidth;
      MKCoordinateSpan globe = MKCoordinateSpanMake(100, 100);

      CLLocationCoordinate2D worldCenter; worldCenter.latitude = 42.0开发者_如何学编程32974; worldCenter.longitude =21.359375;

      MKCoordinateRegion worldmap = MKCoordinateRegionMake(worldCenter, globe);
      mapview.region = worldmap;
      mapview.zoomEnabled = NO;
      mapview.showsUserLocation = YES;
      mapview.delegate = self;

      NSRange theRange;
      theRange.location = 1;
      theRange.length = [annotations count]-1;

      [mapview addAnnotations:[annotations subarrayWithRange:theRange]];
      [self.view addSubview:mapview];   
}

The problem manifests itself only in Landscape orientation.

MKMapView rendering problem on iPad

UPDATE

This is how it spans after I touched the view.

MKMapView rendering problem on iPad


Nonetheless it's Apple's bug. In iPad-landscape mode your longtitude span may not be enough to cover 360degree of the globe. it should autoscale with zoom, but it doesn't. it autozooms properly only if your centerMap is exactly at 0 degree longitude. Weird.

Workaround:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    CLLocationCoordinate2D worldCenter; worldCenter.latitude = 42.032974; 
    worldCenter.longitude = UIDeviceOrientationIsLandscape(toInterfaceOrientation)? 0.0 : 21.359375;
    mapview.centerCoordinate = worldCenter;
}


I did a quick test with your code and get the same result (which I expected). I still think it is not an issue with the map itself but with the way you are setting your center coordinates plus map span. You're trying to center the map too far to the left with max span and the only way for the map to fill the entire screen and maintain the center point would be for it to stretch itself, which is not desirable. If you set lat and long to 0 you get the same view without the missing part.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜