【问题标题】:Setting a MapView's center coordinate does not take into account full size of MapView (off-screen portion)设置 MapView 的中心坐标不考虑 MapView 的全尺寸(屏幕外部分)
【发布时间】:2015-05-13 14:59:10
【问题描述】:

问题

我有一个包含全屏 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 的中心?

【问题讨论】:

  • 你试过用[self.myMapView setVisibleMapRect:myMapRect edgePadding:mapInset animated:NO]

标签: ios objective-c ios8 mkmapview


【解决方案1】:

为了澄清我的评论,您可以使用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 调整为所需的偏移量。

【讨论】:

  • 我尝试过使用它,但visibleMapRect 是完整地图的矩形,即宽和高数千像素。我期待它是屏幕的矩形。启用用户跟踪后,实现此委托方法可防止地图缩放到用户当前位置。有什么想法吗?
  • visibleMapRect 是地图视图当前显示的区域。您的地图视图可能超出了显示框架的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-04-10
  • 2023-04-02
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多