如何启用MKMapView 3D视图?

时间:2016-08-23 23:32:49

标签: macos mapkit

我在一个窗口中有一个MKMapView,pitchEnabled为真(我在调试器中确认了这一点)。指南针中间的“3D”东西是灰色的,点击或拖动它什么都不做。选项 - 拖动地图(就像我在Maps.app中所做的那样)也没有做任何事情。

根据我对文档的解释,设置pitchEnabled应该让我使用3D视图,就像Maps.app那样。我错了吗?我还需要做些什么来让我的用户获得3D地图视图吗?

4 个答案:

答案 0 :(得分:6)

您可以通过调整查看地图的摄像机角度并使建筑物可见来接近3D模式的体验。以下示例允许您以3D形式查看艾菲尔铁塔:

viewDidLoad() {
    super.viewDidLoad()

    mapView.mapType = MKMapType.Standard
    mapView.showsBuildings = true // displays buildings

    let eiffelTowerCoordinates = CLLocationCoordinate2DMake(48.85815, 2.29452)
    mapView.region = MKCoordinateRegionMakeWithDistance(eiffelTowerCoordinates, 1000, 100) // sets the visible region of the map

    // create a 3D Camera
    let mapCamera = MKMapCamera()
    mapCamera.centerCoordinate = eiffelTowerCoordinates
    mapCamera.pitch = 45
    mapCamera.altitude = 500 // example altitude
    mapCamera.heading = 45

    // set the camera property
    mapView.camera = mapCamera
}

示例来自:this question

答案 1 :(得分:0)

自OS X El Capitan v10.11以来,他们添加了一种新的地图类型:" 3D立交模式"

由于某些原因,此选项不会显示在mapview的XCode属性检查器中。您必须以编程方式设置它。这使得地图的外观和行为与地图应用程序中的一样。

self.mapView.mapType = MKMapTypeSatelliteFlyover;

答案 2 :(得分:0)

我能够在iOS 11上快速执行此操作:

mapView.mapType = .hybridFlyover

这给了我3D视图。

答案 3 :(得分:0)

使用此设置方法在viewDidLoad中配置MapView。

func setup() {
        objMapView.showsUserLocation = true
        objMapView.delegate = self
        objMapView.showsBuildings = true
        objMapView.mapType = .hybridFlyover

        objLocationManager.startUpdatingLocation()

        if let center = self.objLocationManager.location?.coordinate {
            let currentLocationCoordinates = CLLocationCoordinate2DMake(center.latitude, center.longitude)
            objMapView.region = MKCoordinateRegion.init(center: currentLocationCoordinates, latitudinalMeters: 1000, longitudinalMeters: 100)

            // create a 3D Camera
            let mapCamera = MKMapCamera()
            mapCamera.centerCoordinate = currentLocationCoordinates
            mapCamera.pitch = 45
            mapCamera.altitude = 100
            mapCamera.heading = 45

            // set the camera property
            objMapView.camera = mapCamera
        }
    }

在以上代码段中:

mapType属性hybridFlyover显示卫星地图以及位置名称(如果有)。

MkMapCamera实例有助于创建地图的3D视图。 altitude属性决定了要投影位置的高度。

检查以下屏幕截图以获取输出:

Screenshot 1