1

我有一段代码可以确定最佳region.span.latitudeDeltaregion.span.longitudeDelta. 它找到左上角和右下角,并获取纬度坐标和长坐标之间的差异。

我遇到的问题是渲染实际上与我在执行时设置的不同:

region = self.regionThatFits(region)
self.setRegion(region, animated: true)

例如,如果我首先选择要渲染的项目(比如说从表格中),然后切换到地图,我会得到不同的结果(视觉上),而不是在地图上显示所有然后选择我想要的保持。

更重要的是,如果我渲染地图上的所有点,然后选择一些点并渲染选中,然后删除过滤器并渲染所有点,地图与我开始时的不同 - 它显示了所有点,但它更小(看起来缩小了)与初始视图相比。

在调试时,我可以看到这两种情况都生成了相同的跨度值,但渲染就好像忽略了它们。从调试使用(在英国的选定点):

  1. 加载所有点:

    region.span.latitudeDelta 7.439768

    region.span.longitudeDelta 11.0

  2. 过滤点:

    region.span.latitudeDelta 1.25

    region.span.longitudeDelta 10.50477

  3. 删除过滤器:

    region.span.latitudeDelta 7.439768

    region.span.longitudeDelta 11.0

在重新渲染之前(而不是仅仅在 viewDidLoad 上),我尝试将地图重新​​居中在一个固定坐标上,但这没有任何区别。

我想强调的是,每次运行上述序列时,地图都不会一直缩小。它有点缩小一次,就是这样。

我缺少一个明显的步骤吗?我需要设置的隐藏布尔值?还有什么?

我也尝试从 regionThatFits 更改为

regionToRender = MKCoordinateRegionMake(region.center, region.span)

我也尝试了以下方法:

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
        self.mapView.region = mapView.region
}

无论我做什么,如果我已经在地图上应用注释过滤器,它看起来好像实际跨度增加/加倍(或者好像地图边缘周围有一个强制框架)使地图看起来好像它尽管调试输出以其他方式显示,但仍被缩小...

下面是来自不同场景的两张图片。任何建议将不胜感激。

谢谢!

  1. 图 1 - 我在表格中时应用了过滤器,然后导航到地图: 在此处输入图像描述

  2. 图 2 - 导航到地图,然后应用过滤器: 在此处输入图像描述

4

1 回答 1

0

在对布局、框架和边界等进行广泛调试后,这就是正在发生的事情:

第一次加载包含地图的 ViewController 时,地图实际上并不适合视图。准确地说,它以自由形式加载,分别有效地为 600x492 WxH。492的高度简直就是:

free form height - NavCon Height - ToolBar Height - default margin (battery etc.)

在渲染注释的第一遍之后(有效地在 viewDidAppear 中),MapView 得到正确的高度(在 iphone 4s 上)372。这很简单:

screen height (480) - NavCon Height - ToolBar Height - default margin

因此,从这一点开始的任何渲染都会产生类似缩小的效果(使一切看起来更小)。

解决方案是计算mapView 将获取并在viewDidLoad 中设置的大小。此外,您可能还应该设置 mapView 自动调整大小掩码以匹配父视图:

self.mapView.autoresizingMask = self.view.autoresizingMask

我希望你觉得这有帮助。

于 2015-10-05T13:55:00.603 回答