2017-06-29 15 views
0

ユーザーの場所が更新されたときにいつでも表示しようとしています。私は多くの異なるリスナーを試しましたが、私はこれを理解していないようです。 ユーザーの場所が更新されたかどうかをテストする最も効果的で効率的な方法は何ですか?Swift 3 Google MapとMapKit API - ユーザーの現在地が更新された場合

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let location = locations[0] 

    let lat = location.coordinate.latitude 
    let long = location.coordinate.longitude 
    print(lat, long) 

    let currentLocation = CLLocationCoordinate2DMake(lat, long) 
    let lastLocation = CLLocationCoordinate2DMake((locations.last?.coordinate.latitude)!, (locations.last?.coordinate.longitude)!) 

    let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: 15) 
    self.mapView.animate(to: camera) 

    let geocoder = GMSGeocoder() 
     if currentLocation.latitude != lastLocation.latitude || currentLocation.longitude != lastLocation.longitude { 
      let alertController = UIAlertController(title: "Location Update", message: "Current location has been updated", preferredStyle: .alert) 

      let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil) 
      alertController.addAction(defaultAction) 

      self.present(alertController, animated: true, completion: nil) 
     } else { 
      print("no update change") 
     } 

    geocoder.reverseGeocodeCoordinate(currentLocation) { (response, error) in 
     if let address = response?.firstResult() { 
      let lines = address.lines! 
      self.currentLocationLabel.text = lines.joined(separator: "\n") 
     } 
    } 

    // self.manager.stopUpdatingLocation() 
} 
+0

didUpdateLocationsはあなたのためには機能しませんか? –

+0

それはブールですか? didUpdateLocations –

答えて

1

あなたはマップ上のユーザーの位置を正しく取得したいと思いますか? あなたはMapViewのからユーザの位置を取得することができますし、didUpdateLocation

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

     if let mylocation = mapview.myLocation{ 

     //animate the mapview to user's location 
     let lat = mylocation.coordinate.latitude 
     let long = mylocation.coordinate.longitude 
     let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: 14.0) 
     mapview.camera = camera 
     mapview.animate(to: camera) 

     } 

} 

でこれを行うことができ、それがお役に立てば幸いです。

+0

の場合、ユーザーの場所が変更されるたびにユーザーの場所が更新されます。 –

+0

はい。また、ユーザーの場所が大幅に更新されたときにマップビューも更新されます – Gamz

関連する問題