MKMapView:缩放到默认的“国家级别”

3
当将MKMapView放入UIViewController并将其设置为卫星视图时,地图会被缩放和调整以显示用户当前所在国家的整个地图,例如下面所示的美国。
当用户现在缩放地图或者我通过编程缩放地图时,似乎无法恢复到默认的缩放级别。
当然,我可以找到这个默认缩放的坐标,以便重新缩放到该设置,但实际上,我需要为每个单独的国家做到这一点,这并不是很值得。
有人知道如何解决这个问题吗? MKMapView with default zoom level showing the United States

第一次如何获取完整的国家? - jcesarmobile
这是MKMapView的默认行为。只需将MKMapView放入UIViewController中并点击构建和运行即可。 - Patrick
2个回答

5
为了实现这一点,需要两种类型的信息。选定国家的中心坐标和在地图上设置region.span的正确值。它可能从苹果地图数据库中获取该数据,我不知道是否向公众公开。但是如果您在互联网上搜索,可能会找到其他地理编码数据库,以提供这两个值。如果找到符合要求的数据库,则可以使用以下代码在地图上设置它:
myMKMapView.region.center = // Center coordinates of country
myMKMapView.region.span = // A value large enough to enclose the country.

谢谢Cliff!现在,我将地图区域存储在NSUserDefaults中,一旦第一次调用mapViewDidFinishLoadingMap:mapView(因为这是将地图设置为“国家缩放级别”的时间)。因此,我可以在需要时使用存储的区域。请注意,您必须将mapView.region.center拆分为mapView.region.span.latitudeDeltamapView.region.span.longitudeDelta,并将mapView.region.center拆分为mapView.region.center.latitudemapView.region.center.longitude,以便将它们存储到您的NSUserDefaults中。 - Patrick

-1
你可以在 viewDidAppear 中保存默认区域,需要时再使用它 :)
class MyController: UIViewController {
    @IBOutlet weak var mapView: MKMapView!
    var defaultRegion: MKCoordinateRegion?

    override func viewDidAppear(animated: Bool) {
        defaultRegion = mapView.region
    }

    func showDefaultMapArea() {
        if let region = defaultRegion {
            mapView.setRegion(region, animated: true)
        }
    }

应该在mapView的委托回调方法- mapView:regionDidChangeAnimated:中分配区域,而不是在viewDidAppear中,因为后者无法保证地图视图的加载状态。 - Raymond
好的,我只是想表达一下你可以“捕获”默认区域并稍后使用它的想法。如果初始化时调用了mapView:regionDidChangeAnimated:,你也可以使用它,只需要确保仅保存一次值,因为该方法将在每次区域更改而不仅仅是初始更改时被调用:} - Simonas Armonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接