2016-12-16 5 views
0

GoogleMap SDKを使用しているユーザーがパスを記録しようとしています。私はポリラインを使ってマップ上に線を引いて、ユーザーにそのパスを表示しています。生成された座標を縮小し、線がきれいに見えるようにするため、startUpdatingLocationの代わりにCLLocationMangerのstartMonitoringSignificantChangeを呼び出します。しかし、それは動作していないようです。ビューがロードされたときにdidUpdateLocationsメソッドを呼び出しますが、その後は呼び出しを停止します。どこが間違っていますか?startMonitoringSignificantLocationChangeはdidUpdateLocationsを呼び出しません

これは

override func viewDidLoad() { 
     super.viewDidLoad() 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
     locationManager.requestAlwaysAuthorization() 

     locationManager.startMonitoringSignificantLocationChanges() 

    } 

    extension LocationViewController: CLLocationManagerDelegate { 

     func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
      if status == .AuthorizedAlways { 
       locationManager.startMonitoringSignificantLocationChanges() 
       mapView.myLocationEnabled = true 
       mapView.settings.myLocationButton = true 
      } 
     } 

     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

      if let location = manager.location { 

        path.addCoordinate(CLLocationCoordinate2D(latitude: location.coordinate.latitude, 
         longitude: location.coordinate.longitude)) 
        let polyline = GMSPolyline(path: path) 
        polyline.strokeColor = UIColor.redColor() 
        polyline.strokeWidth = 3 
        polyline.geodesic = true 
        polyline.map = mapView 

        // Save the coordinates to array 
        coordinateArray.append([location.coordinate.latitude, location.coordinate.longitude]) 



       } 


      } 

     } 
    } 
+0

更新を期待していて、取得していないときはどのくらい移動していますか? – dan

+0

5km先のダウンタウンに行く。 – user30646

+0

500mごとに更新が必要です。アプリをフォアグラウンドで維持していて、デバイスが目を覚ましていますか?バックグラウンドの位置情報を有効にしていないため、アプリが一時停止されたり、デバイスがスリープ状態になったりすると、更新情報は取得されません。 – Paulw11

答えて

0

locationManager.requestAlwaysAuthorization()

locationManager.allowsBackgroundLocationUpdates = true 
locationManager.pausesLocationUpdatesAutomatically = false 

P.S.後にコードの次の行を追加します。私のコードですビューにlocationManagerインスタンスが保持されている場合、ビューがアンロードされた後にロケーション更新が受信されないことがあります。重要な場所の更新には役に立たないため、次の行は削除することができます。

locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
関連する問題