我在一个窗口中有一个MKMapView,pitchEnabled
为真(我在调试器中确认了这一点)。指南针中间的“3D”东西是灰色的,点击或拖动它什么都不做。选项 - 拖动地图(就像我在Maps.app中所做的那样)也没有做任何事情。
根据我对文档的解释,设置pitchEnabled
应该让我使用3D视图,就像Maps.app那样。我错了吗?我还需要做些什么来让我的用户获得3D地图视图吗?
答案 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
属性决定了要投影位置的高度。
检查以下屏幕截图以获取输出: