Closed maxprig closed 3 years ago
Здравствуйте,
Уточните пожалуйста, что не работает и какой результат Вы хотите получить.
В результате указания focusRect, географическая точка в которую смотрим камера попадет в центр focusRect на экране. Это работает, только в случае если не было установлено свойство focusPoint, если оно задано, то камера будет позиционироваться в focusPoint. https://yandex.ru/dev/maps/mapkit/doc/ios-ref/full/Classes/YMKMapWindow.html#focusRect https://yandex.ru/dev/maps/mapkit/doc/ios-ref/full/Classes/YMKMapWindow.html#focusPoint
Спасибо за то, что обратили внимание на мой вопрос!
Проблема в следующем: карта растянута на весь экран. Экран поделен на 3 части. Центр камеры должен находиться в центре блока 1 (условно). И если я вызову метод map.move, то камера должна встать (по заданным координатам, естественно) по центру блока 1.
Вот пример разметки экрана: https://disk.yandex.ru/i/5xr2oAaH51NyGg
Я пытаюсь сделать примерно следующим образом: ` import UIKit import YandexMapsMobile
class ViewController: UIViewController {
@IBOutlet weak var mapView: YMKMapView!
let TARGET_LOCATION = YMKPoint(latitude: 59.945933, longitude: 30.320045)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
mapView.mapWindow.map.mapObjects.addPlacemark(with: TARGET_LOCATION, image: UIImage(named: "imaga")!)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
mapView.mapWindow.focusRect = .init(topLeft: .init(x: 0, y: 0),
bottomRight: .init(x: Float(view.bounds.width), y: Float(view.bounds.height / 3)))
mapView.mapWindow.map.move(
with: YMKCameraPosition(target: TARGET_LOCATION, zoom: 15, azimuth: 0, tilt: 0),
animationType: YMKAnimation(type: YMKAnimationType.smooth, duration: 5),
cameraCallback: nil)
}
} ` Однако, камера центрируется прямо по центру экрана (центр блока 2 условно).
Видимо, после установки focusRect происходит изменение размеров view, в этом случае focusRect и focusPoint сбрасываются. Попробуйте пожалуйста выставлять focusRect в SizeChangedListener, добавить его можно с помощью: MapWindow.addSizeChangedListener.
На всякий случай, напоминаю, что mapkit хранит все листнеры по слабой ссылке, по этому их нужно сохранять на стороне приложения.
Похоже, листенер помог. Большое Вам спасибо за помощь и хорошего дня!!))
Добрый день! Подскажите, пожалуйста, как сдвинуть центр камеры? В документации по андроиду нашел похожий пример со сдвигом focusRect, но на iOS это не работает.
mapView.mapWindow.focusRect = YMKScreenRect(topLeft: YMKScreenPoint(x: 0, y: 0), bottomRight: YMKScreenPoint(x: 300, y: 300))