MGLUserLocationAnnotationView子类不带相机俯仰视角

MGLUserLocationAnnotationView subclass does not take the pitch perspective of the camera

我根据这些文档设计了用户位置图标的样式:

https://docs.mapbox.com/ios/maps/examples/user-location-annotation/

它有效,但尽管我使用了相机和俯仰,但它以二维方式显示。我怎样才能使它处于相机的正确视角并且俯仰效果有效?

我用这段代码添加了 MGLMapCamera:

func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) {
       // Wait for the map to load before initiating the first camera movement.

       mapView.camera = MGLMapCamera(lookingAtCenter: mapView.centerCoordinate, altitude: 200, pitch: 50, heading: 0)
              
}

难道Android没有像gps这样的相机选项模式吗? https://docs.mapbox.com/android/maps/examples/location-component-camera-options/

如果您希望注释视图随地图视图倾斜,可以使用MGLAnnotationView:scalesWithViewingDistance 属性。这决定了注释视图是否随着视点和注释视图之间的距离在倾斜地图上的变化而增大和缩小。

当此 属性 的值为 YES 且地图倾斜时,注释视图如果朝向视图顶部(靠近 horizon)则显得较小,如果它朝向视图的底部(靠近视点)。

我找到了解决方案。

据我所知,没有办法用选项来设置它。所以我手动解决了:

首先,我创建一个图像:

private func setupLayers() {

     if arrow == nil {
           arrow = CALayer()
           let myImage = UIImage(named: "arrow")?.cgImage
           arrow.bounds = CGRect(x: 0, y: 0, width: size, height: size)
           
           arrow.contents = myImage
        
           layer.addSublayer(arrow)
     }
}

然后我使用 MGLRadiansFromDegrees 将弧度转换为度数,并在每次更新时转换图像:

override func update() {
       // Convert Optional to Double
       let camerapitch = Double(mapView?.camera.pitch ?? 0)
        
       let pitch: CGFloat = MGLRadiansFromDegrees(camerapitch)
        
       layer.transform = CATransform3DMakeRotation(pitch, 1, 0, 0)
}