У меня возникли проблемы с отображением фиксированной карты Ирландии с помощью Mapbox в ios на разных размерах экрана. MGLMapView.setVisibleCoordinates кажется тем, что мне нужно, но ведет себя не так, как я ожидал. Я ожидаю передать нижнюю левую координату и верхнюю правую координату и определить прямоугольник для отображения независимо от размера экрана.
mapView.setVisibleCoordinates([CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)], count: 2, edgePadding: UIEdgeInsets.zero, animated: false)
я тоже пробовал
mapView.setVisibleCoordinateBounds(MGLCoordinateBounds(sw: CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), ne: CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)), edgePadding: UIEdgeInsets.zero, animated: false)
К тем же результатам, которые показаны ниже. Как вы можете видеть, макет iPhone 5s идеален, но я ожидаю, что приведенный выше код будет отображать тот же вид на iPad, но он слишком сильно уменьшен. Как я могу отображать один и тот же вид на разных устройствах?
На веб-сайте Mapbox есть пример, который (я думаю) делает именно то, что вы хотите. Я позволил себе вставить ваши координаты и т. д., как показано ниже. Ссылки не работают, поэтому я опубликую код.
Обновлено: Изменено, чтобы запретить прокрутку, панорамирование и масштабирование.
import Mapbox
class ViewController: UIViewController, MGLMapViewDelegate {
private var ireland: MGLCoordinateBounds!
override func viewDidLoad() {
super.viewDidLoad()
let mapView = MGLMapView(frame: view.bounds)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mapView.delegate = self
let northeast = CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)
let southwest = CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362)
var box = [northeast, southwest]
mapView.setVisibleCoordinates(&box, count: 2, edgePadding: UIEdgeInsets.init(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0), animated: false)
mapView.isScrollEnabled = false
mapView.allowsZooming = false
view.addSubview(mapView)
}
}
Я думаю, вы получили это из учебника «Ограничить панорамирование карты областью». Моя карта вообще не перемещается и не масштабируется, поэтому это должен быть просто фиксированный вид, показывающий Ирландию. Я все еще ищу...
А ладно, я неправильно понял. Если вам просто нужен статический вид Ирландии - без прокрутки, без масштабирования, это должен быть просто случай установки вида и соответствующих свойств. Я исправлю свой ответ. Обновлено: только что проверил тестовое приложение, и оно работает для меня как на iPad, так и на iPhone.
Хорошо, у меня это работает. В MGLMapView есть метод камеры, который возвращает камеру, которая приближается настолько, насколько это возможно, при этом отображая указанный вами прямоугольник. Просто нужно убедиться, что это сделано в методе делегата didFinishLoading
.
let northeast = CLLocationCoordinate2D(latitude: 55.499130, longitude: -5.945938)
let southwest = CLLocationCoordinate2D(latitude: 51.133369, longitude: -10.531064)
let ireland = MGLCoordinateBounds(sw: southwest, ne: northeast)
let camera = mapView.camera(mapView.camera, fitting: ireland, edgePadding: UIEdgeInsets.zero)
mapView.setCamera(camera, animated: false)
Это хорошее решение.
Это помогает мне увеличить конкретный регион в Mapbox.
self.mapView.centerCoordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
self.mapView.zoomLevel = 13
self.mapView.centerCoordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
self.mapView.setCenter(CLLocationCoordinate2D(latitude: lat, longitude: long, animated: true)
Это не совсем работает, но я понял теорию. Ipad все еще слишком уменьшен, а iphone слишком сильно увеличен. Не могли бы вы поделиться ссылкой, откуда вы это взяли, в комментарии?