Масштабное изображение, чтобы соответствовать экрану на вращении iPhone
-
26-09-2019 - |
Вопрос
У меня есть UIScrollView, содержащий UiimageView, и у меня есть некоторые проблемы, чтобы получить правильное поведение, когда iPhone вращается.
Цель: Я пытаюсь получить следующее при ходу от портрета на пейзаж:
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| | AAAAAA |
|DDDDDDD| --> | CCCCCC |
|EEEEEEE| | EEEEEE |
|FFFFFFF| |_____GGGGGG_____|
|GGGGGGG|
---------
Здесь все изображение в портретном представлении масштабировано, чтобы соответствовать в поле зрения, когда iPhone вращается. Это также сосредоточено. Я также пытаюсь сохранить соотношение сторон. Пользовательское взаимодействие также включено, и пользователь должен иметь возможность использовать весь экран для Pan / Zoom Image.
В настоящее время у меня есть следующие autoresizingMask
На ScrollView:
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
Но это дает следующее
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| |AAAAAA |
|DDDDDDD| --> [BBBBBB |
|EEEEEEE| [CCCCCC |
|FFFFFFF| [DDDDDD__________|
|GGGGGGG|
---------
Этот параметр сохраняет масштаб и смещение из верхнего левого угла.
Вопрос:Можно ли получить это поведение с использованием подходящего autoresizingMask
? Если нет, он, вероятно, должен установить
scrollView.autoresizingMask = UIViewAutoresizingNone;
и вручную установить zoomScale
а также contentOffset
Для UiscrollView на вращении. Но где это должно быть сделано? Как насчет анимации этого изменения?
Решение:Очень немного изменив ответ ниже, я получил вышеуказанное поведение, используя код ниже:
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
Решение
Попробуй это:
scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter
Я не уверен, что ImageView будет автоматически изменяться в UIScrollView, поэтому, если AutoResing не работает, вы можете попробовать настроить кадр самостоятельно, поверните на равную размер ScrollView.
Другие советы
У меня была похожая ситуация, очень простой ScrollView с 3 ImageSViews («предыдущий», «текущий» и «следующий») для отображения серии фотографий.
Все фотографии были размещены для iPad, но смесь ландшафтных и портретных ориентаций. Я хотел, чтобы они были вписываться на экран, (т. Е. Плета в случае необходимости), с соотношением сторон сохраняется. Я обнаружил, что мне нужно только сделать это с 3 изображениями для него для работы:
imageView.contentMode = UIViewContentModeScaleAspectFit;