如何修复 MapView 放大位置直到出现第二次视图
Posted
技术标签:
【中文标题】如何修复 MapView 放大位置直到出现第二次视图【英文标题】:How to fix MapView zoom into location until a second time view appears 【发布时间】:2013-06-04 23:58:47 【问题描述】:我有一个应用程序可以加载带有 3 个选项卡的 tabbarcontroller。其中之一是地图视图。通过此代码设置为放大用户的位置:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
_mapView.showsUserLocation = YES;
CLLocationCoordinate2D zoomLocation;
//IF no city was selected, use userLocation as center
if (!self.cityWasSelected)
zoomLocation.latitude = self.userLocation.coordinate.latitude;
zoomLocation.longitude = self.userLocation.coordinate.longitude;
CLLocationDistance visibleDistance = 5000; // 5 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);
[_mapView setRegion:adjustedRegion animated:YES];
else //if a city was selected, use that city's value...this is actually the same right now, since self.userLocation is set appropriately elsewhere.
//Set location from selection - forward geocode
zoomLocation.latitude = self.userLocation.coordinate.latitude;
zoomLocation.longitude = self.userLocation.coordinate.longitude;
CLLocationDistance visibleDistance = 5000; // 5 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);
[_mapView setRegion:adjustedRegion animated:YES];
初始选项卡是用于用户偏好的tableviewcontroller,第二个选项卡是mapview,第三个是tableview。当我第一次点击地图视图时,地图会显示整个世界:) 如果我点击返回初始选项卡或列表选项卡然后返回地图视图,则地图正确地以我当前位置为中心。
为什么会这样?
【问题讨论】:
【参考方案1】:在地图视图上设置showsUserLocation
将开始搜索用户的位置。这是一个异步操作,您不能假设将showsUserLocation
设置为YES 后mapView.userLocation
将立即生效。
第一次显示时,您要求地图视图开始位置。 mapView.userLocation
可能返回零。第二次,地图视图可能终于获得了用户位置并成功加载了您的地图区域。这纯粹是运气,您不应该依赖第二次获得位置(它可能会失败,需要比平时更长的时间)。
当地图视图确定了用户位置时,它会回调一个委托方法 (MKMapViewDelegate)。你需要像这样实现这个委托方法:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
// We have location, do your logic of setting the map region here.
...
希望这会有所帮助。
【讨论】:
以上是关于如何修复 MapView 放大位置直到出现第二次视图的主要内容,如果未能解决你的问题,请参考以下文章
在不限制滚动的情况下放大当前用户在 MapView 上的位置?
c语言中如何在一个字符串中查找/出现的位置?需要第一次出现和第二次出现中间的内容和第二次出现和第三