问题

我有一个包含全屏MKMapView的视图。 MapView的下半部分覆盖有一个TableView,该TableView具有半透明的单元格,以便地图可以显示出来。

当我以注释坐标为中心时,例如当前位置,注释视图被TableView阻止。

- (void)centerOnCurrentLocation
{
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.locationManager.location.coordinate, 50000, 50000);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}

尝试的解决方案

我首先尝试以编程方式移动地图以偏移中心,从而向上移动注释。尽管这不是一个简单的解决方案,但是如果我关闭动画,这种方法也可以使用。我也不想关闭动画。

相反,我认为如果将MapView从屏幕顶部扩展到与TableView相同的高度,则MapView的中心将恰好是我想要的位置。没用!当我在较大的MapView上设置中心坐标时,注释仍显示在屏幕的中心,而不是在较大的MapView的中心。似乎MKMapView在计算视图中心时正在使用视图的可见区域。

这是当我使用放大的MapView以当前位置为中心时看到的。

如果只有MKMapView具有centerOffset属性,该属性使您可以通过CGPoint偏移中心。

是否有人有简单,优雅的解决方案来抵消MapView的中心?

最佳答案

只是为了澄清我的评论,您可以使用setVisibleMapRect: edgePadding:创建所需的偏移量。您将需要将其放入mapView委托方法regionDidChangeAnimated:中,这将在地图上的区域更改时随时触发,因此您需要在代码中加上标记来知道何时应用偏移量,或者可以多次应用偏移量。这是您需要做的:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{

    if (!self.mapInsetsSet) {
        self.mapInsetsSet=TRUE;
        [self.myMapView setVisibleMapRect:self.myMapView.visibleMapRect edgePadding:UIEdgeInsetsMake(10, 0, 0, 0) animated:YES];
    }

}

在上面的代码中,mapInsetsSet只是一个布尔值,您可以在其他位置设置它来控制何时应用偏移量。另外,您将需要将UIEdgeInsetsMake调整为所需的偏移量。

关于ios - 设置MapView的中心坐标不会考虑MapView的完整尺寸(屏幕外部分),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30218612/

10-15 17:07