我有一段代码可以确定最佳region.span.latitudeDelta
和region.span.longitudeDelta
。它找到左上角和右下角,并在lat坐标和长坐标之间进行差异。
我遇到的问题是渲染实际上与执行时设置的不同:
region = self.regionThatFits(region)
self.setRegion(region, animated: true)
例如,如果我首先选择项目我要渲染(让我们说从表中)然后切换到地图我会得到与显示不同的结果(视觉上)地图上的所有点,然后选择我要保留的点。
更重要的是,如果我在地图上渲染所有点,请选择一些并渲染选定,然后删除滤镜并渲染全部 ,地图与我开始时的地图不同 - 它显示了所有的点,但与初始视图相比,它更小(看起来缩小了)。
在调试时我可以看到两个场景生成相同的span值,但就好像渲染忽略它们一样。从调试使用(英国的选定点):
加载所有积分:
region.span.latitudeDelta 7.439768
region.span.longitudeDelta 11.0
过滤点:
region.span.latitudeDelta 1.25
region.span.longitudeDelta 10.50477
删除过滤器:
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
}
无论我做什么,如果我已经在地图上应用注释过滤器,它看起来好像实际跨度增加/加倍(或者好像地图边缘周围有一个强制框架)使地图看起来好像它被缩小了,尽管调试输出显示不是......
以下是来自不同场景的两张图片。任何建议将不胜感激。
谢谢!
答案 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
我希望你觉得这很有用。