Objective c iOS5:当我设置MKMapView的区域时,它只显示一个蓝色框
当我显示我的地图时,我希望在中心显示用户的位置,并在用户周围显示大约5公里的距离。我的代码如下: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
- (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)非洲海岸,凝视着许多蓝色的海洋