mapkit:适合的区域无法正确呈现

时间:2015-10-05 13:22:02

标签: swift mapkit swift2 mkcoordinateregion mkcoordinatespan

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

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

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

例如,如果我首先选择项目我要渲染(让我们说从表中)然后切换到地图我会得到与显示不同的结果(视觉上)地图上的所有点,然后选择我要保留的点。

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

在调试时我可以看到两个场景生成相同的span值,但就好像渲染忽略它们一样。从调试使用(英国的选定点):

  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

  4. 我尝试在重新渲染之前将地图重新​​定位在固定坐标上(而不仅仅是在viewDidLoad上),但它没有任何区别。

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

    我有一个明显的缺失吗?我需要设置一个隐藏的布尔值?还有别的吗?

    我也尝试过从regionThatFits更改为

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

    我也尝试了以下内容:

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

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

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

    谢谢!

    1. 图片1 - 当我在桌子中时应用过滤器,然后导航到地图: enter image description here

    2. 图片2 - 导航到地图然后应用过滤器: enter image description here

1 个答案:

答案 0 :(得分:0)

经过大量调试,包括布局,框架和界限,这就是正在发生的事情:

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

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

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

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

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

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

self.mapView.autoresizingMask = self.view.autoresizingMask

我希望你觉得这很有用。