Objective c iOS5:当我设置MKMapView的区域时,它只显示一个蓝色框

Objective c iOS5:当我设置MKMapView的区域时,它只显示一个蓝色框,objective-c,ios5,mkmapview,Objective C,Ios5,Mkmapview,当我显示我的地图时,我希望在中心显示用户的位置,并在用户周围显示大约5公里的距离。我的代码如下: - (void)viewDidLoad { [super viewDidLoad]; mapView.mapType = MKMapTypeStandard; mapView.showsUserLocation = YES; MKUserLocation *userLocation = mapView.userLocation; MKCoordinateRegion region

当我显示我的地图时,我希望在中心显示用户的位置,并在用户周围显示大约5公里的距离。我的代码如下:

- (void)viewDidLoad
{
  [super viewDidLoad];
  mapView.mapType = MKMapTypeStandard;
  mapView.showsUserLocation = YES;
  MKUserLocation *userLocation = mapView.userLocation;
  MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(
                            userLocation.location.coordinate, 5000, 5000);
  [mapView setRegion:region animated:NO];
}
[mapView setRegion:adjustedRegion animated:NO];
结果是,在调用
setRegion
之后,地图现在显示为一个空的蓝色框,无法滚动或缩放。我想了一会儿,它可能会显示海洋,但似乎不是这样,因为地图本身不会滚动。我尝试过将距离设置为50米到25000米,效果也一样。如果我不调用
setRegion
,那么缩小后的世界地图会显示得很好,用户位置会按预期高亮显示

在浏览了一些与此相关的问题后,我还尝试插入以下行:

MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
并按如下方式替换setRegion消息:

- (void)viewDidLoad
{
  [super viewDidLoad];
  mapView.mapType = MKMapTypeStandard;
  mapView.showsUserLocation = YES;
  MKUserLocation *userLocation = mapView.userLocation;
  MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(
                            userLocation.location.coordinate, 5000, 5000);
  [mapView setRegion:region animated:NO];
}
[mapView setRegion:adjustedRegion animated:NO];
但我也得到了同样的结果


我做错了什么?

您没有等待mapView获取有效位置。如果您将控制器设置为mapView的代理,然后告诉mapView将显示用户位置,您最终将得到一个回拨
-(void)mapView:(MKMapView*)mapView didUpdateUserLocation:(MKUserLocation*)userLocation
,该回拨将具有设备坐标。我怀疑你认为你不能缩放或平移的原因是(0,0)在海洋中消失了,一切都是蓝色的。也可能是您的MKMapView尚未设置为允许触摸交互,如收缩和缩放,因此请检查您的xib是否已打开所有正确的复选框。您没有等待mapView获取有效位置。如果您将控制器设置为mapView的代理,然后告诉mapView将显示用户位置,您最终将得到一个回拨
-(void)mapView:(MKMapView*)mapView didUpdateUserLocation:(MKUserLocation*)userLocation
,该回拨将具有设备坐标。我怀疑你认为你不能缩放或平移的原因是(0,0)在海洋中消失了,一切都是蓝色的。也可能是您的MKMapView尚未设置为允许触摸交互,如捏缩和缩放,因此检查您的xib是否已打开所有正确的复选框

只是为了跟进此操作,我添加了一些日志记录,并且正在创建
区域
,中心位置为0,0,跨度约为5000 x 5000m,而
adjustedRegion
的跨度为7500m x 5900m,这也很公平。但如果我只是
[mapView SetCentreCoordination:userLocation.location.coordinate]世界地图显示得很好,但蓝色圆点正好位于最左侧和加利福尼亚上方。有趣的是,我认为0,0在英格兰的格林威治之上。格林威治在0经度,然后一直向南到赤道,得到0纬度,你会发现自己在非洲海岸的(0,0)处,凝视着许多蓝色的海洋。我添加了一些日志记录,并且正在创建
区域,以0.0为中心,跨度约为5000 x 5000m,且
调整区域的跨度为7500m x 5900m,这也足够公平。但如果我只是
[mapView SetCentreCoordination:userLocation.location.coordinate]世界地图显示得很好,但蓝色圆点正好位于最左侧和加利福尼亚上方。有趣的是,我还以为0,0在英格兰的格林威治之上。格林威治在0经度,然后径直向南到赤道,到达0纬度,你会发现自己在(0,0)非洲海岸,凝视着许多蓝色的海洋