Как сделать снимок MKMapView в ландшафтном режиме - PullRequest
0 голосов
/ 30 мая 2018

Я могу сделать снимок MKMapView в портретном режиме, но не в ландшафтном режиме.Я автоматически поворачиваю UIView в горизонтальное положение, используя функции, приведенные ниже.Я могу видеть вид карты как повернутый к пейзажу.Но когда я делаю снимок, используя MKMapSnapshotter, я снова получаю изображение с картой в портретном режиме.

override var shouldAutorotate: Bool {
    return true
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .landscapeLeft
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscapeLeft
}

Я догадываюсь, что это как-то связано с установкой MKMapSnapshotOptions в альбомную ориентацию, но яне уверен, как это сделать.

let mapSnapshotOptions = MKMapSnapshotOptions()
mapSnapshotOptions.region = mapView.region
mapSnapshotOptions.scale = UIScreen.main.scale
mapSnapshotOptions.size = mapView.frame.size 

Я ожидаю, что приведенный выше код должен был обработать его, поскольку представление карты уже повернуто на альбомную, но это не так.

mapView.frame.size =  (375.0, 647.0)

Я наблюдаю одинаковое значение фрейма mapView для обоих случаев: портретного и ландшафтного.

Я пытался использовать CLLocationManagerDelegate.Но без выгоды.Приведенная ниже функция вызывается, когда параметры моментального снимка уже установлены.

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    // heading is updated for delegates only after any transition has ended
    // therefore, snapshot properties are set already by the time program reaches this function
    mapView.camera.heading = newHeading.magneticHeading
    mapView.setCamera(mapView.camera, animated: true)
}

Пожалуйста, предложите, что еще можно сделать?

...