Mapbox iOS SDK - visibleFeaturesAtPoint returns 空数组

Mapbox iOS SDK - visibleFeaturesAtPoint returns empty array

我正在尝试 MGLMapView.visibleFeaturesAtPoint,但总是返回一个空数组。有人能告诉我我做错了什么吗?

下面发布的是我的代码,基本上是添加标记示例 (https://www.mapbox.com/ios-sdk/examples/marker/),但使用相同的点在标记点处获取可见特征。

import Mapbox

class ViewController: UIViewController, MGLMapViewDelegate {
override func viewDidLoad() {
    super.viewDidLoad()

    let mapView = MGLMapView(frame: view.bounds)
    mapView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

    // Set the map’s center coordinate and zoom level.
    mapView.setCenterCoordinate(CLLocationCoordinate2D(latitude: 40.7326808, longitude: -73.9843407), zoomLevel: 12, animated: false)
    view.addSubview(mapView)

    // Set the delegate property of our map view to `self` after instantiating it.
    mapView.delegate = self

    // Declare the marker `hello` and set its coordinates, title, and subtitle.
    let hello = MGLPointAnnotation()
    hello.coordinate = CLLocationCoordinate2D(latitude: 40.7326808, longitude: -73.9843407)
    hello.title = "Hello world!"
    hello.subtitle = "Welcome to my marker"

    // Add marker `hello` to the map.
    mapView.addAnnotation(hello)

    //let ptTest = CGPoint(x: 1, y: 1)

    print(mapView.visibleCoordinateBounds)

    let ptTest = mapView.convertCoordinate(hello.coordinate, toPointToView: mapView)
    print(ptTest)
    print(mapView.visibleFeatures(at: ptTest))

}

// Use the default marker. See also: our view annotation or custom marker examples.
func mapView(mapView: MGLMapView, viewForAnnotation annotation: MGLAnnotation) -> MGLAnnotationView? {
    return nil
}

// Allow callout view to appear when an annotation is tapped.
func mapView(mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
    return true
}
}

问题已由 mapbox 团队在 Github 上回答。

"Does the issue reproduce if you move the call to visibleFeatures(at:) to viewDidAppearAnimated(:) or mapViewDidFinishLoadingMap(:)? By the time viewDidLoad() runs, the view controller has loaded, but the map view may not have had a chance to load the style or tiles completely yet."

显然将其放入 viewDidLoad() 意味着地图尚未完全加载,因此要素数组返回为空。将其移动到 mapViewDidFinishLoadingMap() 解决了这个问题。