这是我的一个小方法,它获取位置管理器的当前位置,并将地图聚焦在其上方一点,为我添加到地图顶部的其他子视图腾出空间。如果跨度的横向/纵向增量过大(大于1.0),则每次设置区域时,跨度都会越来越大,直到地图一直缩小,即使没有实际接触地图。我认为这与重用地图视图的跨度有关,但我不知道到底发生了什么
- (void)setRegion {
CLLocationCoordinate2D coord = locationManager.location.coordinate;
MKCoordinateSpan span = mapView.region.span;
coord.latitude += 0.002 * (span.latitudeDelta / 0.012523);
MKCoordinateRegion region = MKCoordinateRegionMake(coord, span);
[mapViewGlobal setRegion:region animated:animated];
}
来自Apple的文档"如果您想在不更改缩放级别的情况下更改中心坐标,请使用setCenterCoordinate:animation:。"MKMapView
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated
MKMapView将选择一个新的区域,该区域非常适合重新定义的缩放级别,同时仍然显示整个目标区域,每次向北移动时,跨度都会发生变化,事情就会失控。
此外,你计算纬度变化幅度的方法有点奇怪。除了做倍数和除法外,它只在特定的纬度(它们远离赤道)和特定的缩放级别下工作。你最好计算出地图需要滚动多少像素(大概是子视图高度的一半),然后使用此函数计算出地图的中心位置。
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view
另一种方法是将子视图放在MKMapView之外,但这会影响美观。