【问题标题】:MKMapView visibleMapRect not completely visibleMKMapView visibleMapRect 不完全可见
【发布时间】:2014-10-24 03:46:14
【问题描述】:

我有一个MKMapView,它使用MKPolygon 标记一个特定区域。我希望地图具有适合 mapView / 屏幕的最小缩放系数,意味着完全可见。

为了实现这一点,我尝试了以下方法

MKPolygon *overlay;
[[self mapView] setVisibleMapRect:[overlay boundingMapRect] edgePadding:UIEdgeInsetsMake(16, 16, 16, 16) animated:YES];

不幸的是,我的 mapView 没有将整个矩形设置为可见。矩形填充地图而不是拟合

这是我需要的与我得到的:

我怎样才能实现我的目标?

【问题讨论】:

  • 那不可能是实际代码(overlay 未声明为指针,未初始化,boundingRect 应该是 boundingMapRect 等)。在实际代码中,您确定叠加层指向正确的吗?在此之后是否还有另一个 setRegion 或 setVisibleMapRect 调用? MKMapView 框架是设置在屏幕上还是超出了屏幕范围?看起来地图高度是正确的,但宽度可能太宽了。
  • @Anna:这是 mapView 上唯一的叠加层,只有一个 -setVisibleMapRect: 调用。我在-viewDidLoad 方法中只写了几行代码来看看它是如何工作的。我用boundingMapRect 和丢失的指针更正了错字
  • 谢谢@Anna,您给了我正确的想法,请参阅下面的答案。我对MKMapView的经验还不是很多,所以我没有看到它=)

标签: ios8 mkmapview mapkit overlay region


【解决方案1】:

我终于找到了答案。它不必与MKMapView 做任何事情。我刚开始在 Xcode 6 中使用大小类,所以找到了我的问题。

[MKMapView -setVisibleMapRect:edgePanning:animated:] 的调用过早,即在-viewDidLoad 方法中。

当我想到Annas comment 并进行了一番探索时,我发现她完全正确。然后我突然意识到我应该稍后调用 mapView 方法,例如-viewDidLayoutSubviews.

当我移动一行时,它工作得非常完美!谢谢Anna

【讨论】:

    【解决方案2】:

    您想通过-[[self mapView] mapRectThatFits:] 传递[overlay boundingMapRect]

    仍然以地图同一点为中心的地图矩形,但其宽度和高度已调整为适合地图视图的框架。

    【讨论】:

    • 这并没有改变任何东西......:/但我现在找到了解决方案。
    【解决方案3】:

    如果在-viewDidLayoutSubviews中设置了-setVisibleMapRect,那么地图放大/缩小时可见的maprect会被重置。

    我的改进是:定义一个类级别标志并仅在该标志打开时调用 -setVisibleMapRect。调用 -setVisibleMapRect 后,关闭该标志。从现在开始,放大/缩小地图不会重置可见的 maprect。这是我在 Swift 中的代码:

    var resetMapRect = true // class level variable
    
    override void viewDidLayoutSubviews() {
        if resetMapRect {
            // set visible maprect here
            resetMapRect = false // no more setting maprect
        }
    }
    

    【讨论】:

    • 感谢您的意见,但正如您所见,我们确实已经找到了正确的答案,这是一个不同的问题 :-) 但我们也有一个 Swift 解决方案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2019-12-23
    相关资源
    最近更新 更多