3

这是我的一个小方法,它获取位置管理器的当前位置并将地图聚焦在其上方一点点,以便为我添加到地图顶部的其他一些子视图腾出空间。如果跨度的纬度/经度增量太大(超过 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];
}
4

1 回答 1

4

来自 Apple 的文档“如果您想在不更改缩放级别的情况下更改中心坐标,请改用 setCenterCoordinate:animated:。” MKMapView

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated

MKMapView 将选择一个新区域,该区域非常适合重新定义的缩放级别,同时仍显示您的整个目标区域,并且每次向北移动时,跨度都会发生变化,事情就会失控。

此外,您计算纬度变化幅度的方法有点奇怪。除了在可以做到这一点时进行倍数和除法之外,它只能在一定的纬度(它们远离赤道)和一定的缩放级别上工作。您最好计算出地图需要滚动多少像素(大概是子视图高度的一半),然后使用此函数计算出需要将地图居中的位置。

- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view

另一种方法是将子视图放在 MKMapView 之外,但这会影响您的美观。

于 2012-08-22T09:25:15.417 回答