Arhn - архитектура программирования

Текущее местоположение пользователя на определенной позиции на КАРТЕ

  • MKMapView
  • CoreLocation
  • Swift3.0

У меня есть такое требование:

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

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

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

Я сделал Some RND и нашел несколько полезных ссылок:

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

Требуемая позиция PIN-кода:  введите описание изображения здесь

В настоящее время отображается в другой позиции.

Примечание. ** Не хотите, чтобы Google Map имел такую ​​функциональность.


  • Я не совсем понимаю ваш вопрос, хотите ли вы, чтобы 1. значок был визуально в этом месте, даже когда пользователь перемещается по нему, или 2. прикреплять карту к этому месту, когда пользователь выполняет действие, или 3. иметь карту сдвинуть, чтобы штифт находился на месте экрана? Возможно, вы захотите более четко описать вашу проблему или добавить несколько изображений, чтобы показать желаемый результат. 09.12.2016
  • @Ben Ong, я хочу, чтобы булавка была визуально в этом месте, даже когда пользователь перемещается вокруг 09.12.2016
  • @BenOng Я обновил вопрос со снимком экрана, мне нужно одно и то же положение штифта всякий раз, когда пользователь увеличивает масштаб и отображается первый экран 10.12.2016
  • @vadian любезно поделитесь своим предложением по этому поводу: stackoverflow.com/q/41057877/3400991 13.12.2016

Ответы:


1

Если вы использовали что-то подобное 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 в этом случае ваш друг.

09.12.2016
  • Итак, где мне нужно использовать этот код, я имею в виду делегат 09.12.2016
  • Я обновил вопрос со снимком экрана, мне нужно одно и то же положение булавки всякий раз, когда пользователь увеличивает масштаб и отображается первый экран 10.12.2016
  • Я бы пошел с этим ответом, вы можете использовать эти коды в func locationManager (_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) CLLocationMangerDelegate - возможно, ваш контроллер представления или супервизор вашего mapView 12.12.2016

  • 2

    Вот трюк, который можно использовать для размещения карты таким образом, чтобы штифт 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)
        }
    
    19.12.2016
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..