我正试图在IB中的viewController中添加一个mapKit,我正在导航控制器的顶部推动它,但是无论在循环中的哪个位置添加注释,似乎整个过程都会导致延迟,直到mapKit没有呈现出来,包含所有内容的scrollview就不容易滚动。在iOS中有没有类似于Android的后台线程的方法?
下面是代码,即使没有添加任何注释,渲染仍然会导致延迟。我敢肯定还有别的办法。知道吗?

class DetailViewController: UIViewController , MKMapViewDelegate{

    override func viewDidLoad() {
            super.viewDidLoad()
            self.mapView?.delegate = self
    }


      //changing the annotation
        func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
            if (annotation is MKUserLocation) {
                return nil
            }
            let reuseId = "detailMrker"
            var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
            if anView == nil {
                anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
                anView?.image = UIImage(named:"location.png")
                anView?.canShowCallout = true
            }
            else {
                anView?.annotation = annotation
            }
            return anView
        }

}

最佳答案

您可以提前呈现一个VC,并在屏幕外以一个模式呈现它。如果您必须从UINavigationController中进行push操作,那么在VC被push之后,您将一直等待VC调用其视图的draw方法。
不过,还有其他事情你可以提前做。使用DetailFeedViewController以外的内容作为CLLocationManagerDelegate和MKMapDelegate。如果你这样做了,你可以得到用户的位置,设置地图坐标,并添加你的注释,在VC被推之前。

关于ios - 在导航 Controller 上推送的viewController中实现MapKit的有效方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42591575/

10-13 03:49