MKMapView 自己缩小
Posted
技术标签:
【中文标题】MKMapView 自己缩小【英文标题】:MKMapView zooms itself out 【发布时间】:2012-08-21 19:22:30 【问题描述】:这是我的一个小方法,它获取位置管理器的当前位置并将地图聚焦在其上方一点点,以便为我添加到地图顶部的其他一些子视图腾出空间。如果跨度的纬度/经度增量太大(大于 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];
【问题讨论】:
setRegion:animated:
之后的结果范围可能与输入范围略有不同。这是 MKMapView 的一个已知问题。在您的情况下,跨度可能每次都会变大。
我知道生成的跨度并不完全相同,但在我的情况下,我将地图放大到足够远,以便您可以看到各个城市,并且在此方法的 4-5 次迭代中地图被完全放大,甚至没有触及地图本身。
变量“animated”从何而来?是还是不是?
【参考方案1】:
来自 Apple 的文档“如果您想在不更改缩放级别的情况下更改中心坐标,请改用 setCenterCoordinate:animated:。” MKMapView
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated
MKMapView 将选择一个新区域,该区域非常适合重新定义的缩放级别,同时仍显示您的整个目标区域,并且每次您向北移动时,跨度都会发生变化,事情就会失控。
另外,您计算纬度变化幅度的方法有点奇怪。除了在可以做到这一点时进行倍数和除法之外,它只能在一定的纬度(它们远离赤道)和一定的缩放级别上工作。您最好计算出地图需要滚动多少像素(大概是子视图高度的一半),然后使用此函数计算出需要将地图居中的位置。
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view
另一种方法是将子视图放在 MKMapView 之外,但这会影响您的美观。
【讨论】:
太棒了。setCenterCoordinate:
是完美的。我不完全明白我将如何使用convertPoint:
来聚焦地图,以便坐标水平居中但定位为 y 值为地图高度的 2/3 而不是 1/2。
如果您希望您的注释位于子视图未覆盖的区域的中心,您需要使地图查看不同的中心点。如果子视图在 600 像素地图视图的顶部为 100 像素,则您的注释需要在中心下方 50 像素。不管它是多少度数,它都是您想要的像素数(除非您的子视图以度数为单位)。因此,找出中心注释上方 50 像素的屏幕点的坐标并平移到该坐标,从而将注释向南移动 50 像素并进入非子视图区域的中间。以上是关于MKMapView 自己缩小的主要内容,如果未能解决你的问题,请参考以下文章