2017-03-04 4 views
0

IBのviewControllerにmapKitを追加しようとしていますが、ナビゲーションコントローラの上を押していますが、サイクルのどこでも注釈を追加しても、遅延が発生してmapKitがレンダリングされないようですすべてを含むスクロールビューは簡単にスクロールしません。例えば、バックグラウンドスレッドでAndroidに似たiOSでこれを行う方法はありますか?Navigation Controllerを押す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がそのビューの描画メソッドを呼び出すのを待っています。

ただし、事前にできることは他にもあります。 CLLocationManagerDelegateとしてDetailFeedViewController以外のものを使用し、MKMapDelegateを使用します。これを行うと、VCがプッシュされる前に、ユーザーの場所を取得し、マップの座標を設定し、注釈を追加することができます。

+0

返事をありがとう。時間のVCをレンダリングすることによって、ビューコントローラをインスタント化してから、ちょうど(vc ...)のようなものを意味するのでしょうか? – TheeBen

+0

それを処理するにはさまざまな方法があり、それが関係しています。そうでなければ、私は例を挙げるだろう。基本的には、VCのビュープロパティは、他のUIViewと同様に扱うことができます。drawメソッドは呼び出すことができます。myVC = UIViewController()はviewDidLoadのみをコールします。 animateWithDurationとモーダルプレゼンテーションを調べます。 – dylanthelion

+0

また、これは重要な部分ですが、MKMapKitは視覚的には詳細であるが、携帯端末やGPSからのデータが必要なため、通常は遅くはありません。私は私の答えの後半がより役立つだろうと確信しています。もしあなたが望むなら、私はあなたに私の例のいくつかを見つけることができます。 – dylanthelion

関連する問題