2016-12-09 3 views
0
  • MKMapView
  • CoreLocation
  • Swift3.0

У меня есть требование, как это:пользователя Текущее местоположение на конкретной позиции на МАП

Создание приложения в котором я получаю Lat and Long для различных lo катион из webservice. Построение этих мест на карте с помощью Пользовательского AnnotationView. Кроме того, я показываю User Current Location with Custom Image.

Здесь все работает fine.

Теперь, когда пользователь перемещается, пользовательский текущий контакт местоположения меняет свое положение, поэтому для этого требуется важное требование, мне нужно сделать это положение текущего местоположения таким образом, чтобы оно закрепилось в нижней части карты (just 100 pixel) выше снизу.

Я сделал некоторые RND и узнать несколько полезных ссылок:

Но это больше не работает. Просьбы предложить, как я могу установить пользовательскую текущее местоположение булавку в iOS карты таким образом, что она всегда в нижней части карты (100 пикселей выше от Bottom)

Требуемого положения штифта: enter image description here

В настоящее время это показывая в другом положении.

Примечание - ** Не хотите, чтобы карта Google для такой функциональности.

+0

Я не очень понимаю ваш вопрос, вы хотите 1.Have булавку, чтобы быть визуально в этом месте, даже когда пользователь нажимает вокруг или 2.привязать карту к тому месту, когда пользователь выполняет какое-либо действие, или 3. сдвинуть карту, чтобы контакт находился в месте экрана? Возможно, вам захочется описать вашу проблему яснее или добавить некоторые изображения, чтобы показать результат, который вы хотите. –

+0

@Ben Ong. Я хочу, чтобы штырь был визуально в этом месте, даже когда пользователь обходит вокруг –

+0

@BenOng i обновленный вопрос со снимком экрана, i требуется такое же положение штифта, когда пользовательский масштаб и первый экран времени показывают –

ответ

0

Вот трюк, чтобы использовать, чтобы позиционировать карту таким образом, что UserLocation штифт получает регулируется автоматически:

func setUserLocationOnLowerPositiononMap(coordinate: CLLocationCoordinate2D) { 
     var region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 
     region.center = coordinate 
     self.map.setRegion(region, animated: true) 
     //self.map.moveCenterByOffSet(offSet: CGPoint(x: 0, y: -130), coordinate: coordinate) 
     self.map.moveCenterByOffSet(offSet: CGPoint(x: 0, y: SCREEN_HEIGHT - SCREEN_HEIGHT * 4/3 + 0), coordinate: coordinate) 
    } 
0

Если вы использовали что-то вроде этого mapView.setUserTrackingMode(.Follow, animated: true), тогда местоположение пользователя будет всегда отображаться в центре карты, масштабирование/панорама будет автоматически изменяться при каждом обновлении местоположения пользователя.

Вам необходимо отключить UserTrackingMode, а затем вручную настроить масштабирование/панорамирование карты с помощью func setVisibleMapRect(_ mapRect: MKMapRect, edgePadding insets: UIEdgeInsets, animated animate: Bool) при каждом изменении местоположения пользователя.

Я использовал следующий код в аналогичной ситуации

let annotationPoint = MKMapPointForCoordinate(mapView.userLocation.coordinate); 
var zoomRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 1, 1); 
annotationPoint = MKMapPointForCoordinate(annotation.coordinate); 
let pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 1, 1); 
zoomRect = MKMapRectUnion(zoomRect, pointRect); 
mapView.setVisibleMapRect(zoomRect, edgePadding: UIEdgeInsetsMake(40, 50, 160, 50), animated: true) 

P.S. edgePadding - твой друг в этом случае.

+0

, поэтому, когда мне нужно использовать этот код, делегат которого я имею в виду –

+0

i обновленный вопрос со снимком экрана, мне нужна такая же позиция вывода, когда пользовательский масштаб и первый экран времени показывают –

+1

. Я бы пошел с этим ответом, вы можете использовать эти коды в func locationManager (_ manager: CLLocationManager, didUpdateLocations location: [CLLocation]) из CLLocationMangerDelegate - возможно, ваш контроллер просмотра или супервизор вашего mapView –

Смежные вопросы