Масштабное изображение, чтобы соответствовать экрану на вращении iPhone

StackOverflow https://stackoverflow.com/questions/4219629

Вопрос

У меня есть 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top