2017-03-21 2 views
0

지도가 항상 사용자 위치의 가운데에 오도록하고 싶지만 항상 정확한 확대/축소 수준으로 유지하려고합니다. 이 answer에서 얻은 것은 사용자 위치를 확대하지 않고 userTrackingMode을 사용할 수 없다는 것입니다. iOS -지도 사용자 위치가 중앙에 맞지 않음

는 그래서 문제는 내가 CLLocationManager 기능 didUpdateLocations에서 위치를 얻을 locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])manager.location?.coordinatelocations.last?.coordinate과 다른 점이다 사용자의 위치

func updateRegion(withUserLocation userLocation: CLLocationCoordinate2D) { 
     var region = MKCoordinateRegion.init(center: userLocation, span: MapBodyViewConstants.zoomLevel) 
     // Avoid random spanning on the map by setting the region's span to be the same with the map's span 
     region.span = mapView.region.span 

     mapView.setRegion(region, animated: true) 
    } 

를 따라 해결 방법을 만들었습니다. 그것은 작은 차이지만, 여전히 차이가 있습니다 (나는 와이파이와의 차이점을 발견 할뿐입니다).

왜 차이가 있으며 어떤 것을 사용해야합니까? 일부 연구 후 나는 locations.last.coordinate을 선호하지만 확실하지는 않습니다 (파란색 사용자 도트는 관리자의 위치를 ​​사용하지만 이것에 대해서는 확실하지 않다고 생각합니다)

하나 더 질문 : iOS를 사용하여지도 사용자에게 파란색 점 위치를 부여 하시겠습니까? 그것은 locationManager 좌표 또는 무엇입니까? 또한 내가 언급해야한다고 생각 :

나는

편집이 ... 질문은 충분히 명확 바랍니다. 문제는 MKMapViewDelegate 방법 mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation)에 없습니다. 그건 잘 작동합니다. 그러나 어느 시점에서 내가 앱을 시작할 때 CLLocationManager의 위치를 ​​사용하고 그 곳에서 문제가 발생합니다

답변

1

차이점은 각각의 업데이트 방법에 따라 정상적으로 나타납니다. 가장 최근의 위치 개체가되도록 항상 위치 개체의 타임 스탬프를 확인해야합니다. 또한,이 manager.location에 대한 애플의 문서에서입니다 :

iOS 4.0 버전 이상에서,이 속성은 실행시에 최근 위치 객체를 포함 할 수있다. 특히 중요한 위치 업데이트가 실행 중이고 앱이 종료 된 경우 앱을 다시 실행하고 새 위치 관리자 개체를 만들 때이 속성이 가장 최근 위치 데이터로 업데이트됩니다. 이 위치 데이터는 앱에서 처리 한 마지막 위치 이벤트보다 최근 일 수 있습니다. 이 속성에 저장된 위치의 타임 스탬프를 확인하는 것이 좋습니다. 수신자가 현재 위치 데이터를 수집하고 있지만 최소 거리 필터가 큰 경우 반환 된 위치는 비교적 오래되었을 수 있습니다. 이 경우 수신기를 중지하고 다시 시작하여 강제로 업데이트 할 수 있습니다.

관련 문제