2016-08-20 2 views
1

데이터베이스에 저장된 사용자 프로필에서 얻은 좌표로지도의 초기 위치를 설정하려고합니다. 사용자 위치라고 말합니다. 나는 GMSCameraPositionviewDidLoad라고 부르지 만 시뮬레이터가 현재 위치를 감지하고 내가 설정하려고 시도하는 위치가 아닌지도를 중앙에 위치시키는 것을 알아 챘다. userLocation에 위치한지도가 잠깐 보였지만 즉시 현재 위치로 이동합니다.Swift에서 초기지도 위치를 설정하는 방법은 무엇입니까?

나는 심지어 stopUpdatingLocation 메서드를 호출하지만 성공하지는 않습니다.

stopUpdatingLocation 전화 위치를 한 번만 업데이트하면 중지 될 수 있습니까? 그것은 내가 브레이크 포인트를 사용하여 추적했을 때 내게 나타난 것입니다!

GMSCameraPosition도 기본 좌표를 변경하거나 제공된 좌표 만 집중 시키나요?

다음은 코드입니다.

override func viewDidLoad() { 
    super.viewDidLoad() 

    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
    locationManager.distanceFilter = 50 
    locationManager.requestWhenInUseAuthorization() 

    mapView.delegate = self 

    if userLocation != nil { 

     mapView.myLocationEnabled = false 
     locationManager.stopUpdatingLocation() 

     mapView.camera = GMSCameraPosition(target: selectedCoordinate!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
    } 

} 

extension MapViewController: CLLocationManagerDelegate { 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     if status == .AuthorizedWhenInUse { 

      locationManager.startUpdatingLocation() 

      mapView.myLocationEnabled = true 
      mapView.settings.myLocationButton = true 
     } 
    } 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     if let location = locations.first { 

      mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 

      locationManager.stopUpdatingLocation() 
     } 

    } 

} 

extension MapViewController: GMSMapViewDelegate { 

    func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) { 

     reverseGeocodeCoordinate(position.target) 

    } 
} 

감사

답변

1

추가 : -

locationManager. stopMonitoringSignificantLocationChanges() 또한 locationManager.stopUpdatingLocation()

CLLocationManagerDelegate 당신이 라인 mapView.delegate = self을 실행하면 의미 asynchronously 실행 수준의 프로토콜 있음을 숙지 한 후, 당신은 당신의 대리자를 초기화 한 selfusersCurrentLocation geoCoordinates를 가져 오도록 전화를 보냅니다. 즉, 프로토콜 Deleg 주어진 메소드는 그 특정 클래스에 부합합니다. 왜냐하면 만약 그들이 그렇다면 당신은 stopUpdatingLocation()을 호출했는지 여부에 관계없이 메소드를 호출 할 것이기 때문입니다.

그래서 솔루션 : -

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

    if userLocation != nil { 



    locationManager.stopUpdatingLocation() 


    mapView.camera = GMSCameraPosition(target: selectedCoordinate!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
} else if let location = locations.first { 

     mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 

     locationManager.stopUpdatingLocation() 
    } 

} 
+0

감사합니다. 나는 깃발을 사용하여 같은 것을 얻었지만 당신의 대답은 더 깨끗합니다. – ashishn

+0

다른 문제가 있습니다. 무작위로 <+ 51.17889992, -1.82639994> 좌표를 엽니 다. CLLocationCoordinate2D (위도 : 51.17889991879489, 경도 : -1.8263999372720716) MapViewCoontroller - didUpdateLocations - 지역 선택 - idleAtCameraPosition - 위치 아래는 인쇄 문 출력 MapViewCoontroller있는 옵션 (<+ 51.17889992는 -1.82639994> MapViewCoontroller - didUpdateLocations - 위치 선택 : 선택 사항 (<+ 51.17889992, -1.82639994> – ashishn

+0

아니요 + + 18.49655889, + 73.81614894> – ashishn