2017-03-04 40 views
0

我想添加一個mapKit在IB中的viewController,我推動我的導航控制器頂部,但無論在週期中的哪裏我添加註釋看起來像整個事情導致延遲,直到mapKit不呈現包含所有內容的滾動視圖不容易滾動。有沒有辦法在後臺線程的iOS中類似於Android來做到這一點?在導航控制器上推送的viewController中實現MapKit的高效方法?

下面是代碼,即使沒有添加任何註釋,渲染仍然會導致延遲。我很確定還有另一種方法。任何想法?

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 
     } 

} 
+0

請顯示您的真實代碼。 – matt

回答

1

可以渲染一個VC時間提前,並從屏幕外呈現它,採用模態演示。如果你絕對必須從你的UINavigationController中推送,那麼在VC被推入之後,你一直等待VC調用其視圖的繪製方法。

但是,還有其他的事情可以提前做。使用DetailFeedViewController以外的其他東西作爲CLLocationManagerDelegate和MKMapDelegate。如果你這樣做了,你可以在推送VC之前獲取用戶的位置,設置地圖座標並添加註釋。

+0

感謝您的回覆。通過渲染一段時間,你的意思是像實例化視圖控制器然後呈現(vc ...)? – TheeBen

+0

有不同的方式來處理它,它涉及到;否則我會提供一個例子。基本上,一個VC的視圖屬性可以像其他任何UIView一樣處理:它的繪製方法可以被調用,等等...... let myVC = UIViewController()只調用viewDidLoad,所以你必須做更多的工作。看看animateWithDuration和模態演示。 – dylanthelion

+0

另外,這也是重要的一部分,MKMapKit一般不會慢,因爲它的視覺更加細緻,但因爲它需要來自蜂窩設備或GPS的數據。我敢打賭,我的答案的後半部分會更有幫助。如果你願意,我可以找到你的一些例子。 – dylanthelion

相關問題