Масштабировать изображение по размеру экрана при повороте iPhone - PullRequest
8 голосов
/ 19 ноября 2010

У меня есть UIScrollView, содержащий UIImageView, и у меня есть некоторые проблемы, чтобы получить правильное поведение, когда iPhone вращается.

Цель: Я пытаюсь получить следующее при переходе от портрета к ландшафту:

_________
|AAAAAAA|
|BBBBBBB|         _________________
|CCCCCCC|         |     AAAAAA     |
|DDDDDDD|    -->  |     CCCCCC     |
|EEEEEEE|         |     EEEEEE     |
|FFFFFFF|         |_____GGGGGG_____|
|GGGGGGG|
---------

Здесь все изображение в книжной ориентации масштабируется, чтобы уместиться в альбомной ориентации при вращении iPhone. Это также по центру. Я также пытаюсь сохранить соотношение сторон. Взаимодействие с пользователем также включено, и пользователь должен иметь возможность использовать весь экран для панорамирования / масштабирования изображения.

В настоящее время у меня есть следующее 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;

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Попробуйте это:

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                           UIViewAutoresizingFlexibleHeight);    
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                           UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter

Я не уверен, будет ли автоматически изменен размер imageView в UIScrollView, поэтому, если автоматическое изменение размера не работает, вы можете попробовать установить кадр самостоятельно при повороте наравен размеру прокрутки.

0 голосов
/ 15 февраля 2012

У меня была похожая ситуация: очень простой scrollView с 3 изображениями («предыдущий», «текущий» и «следующий») для отображения серии фотографий.

Все фотографии были рассчитаны на iPad, но представляли собой смесь альбомной и портретной ориентации. Я хотел, чтобы они вписывались в экран (то есть, в случае необходимости, в почтовый ящик) с сохранением соотношения сторон. Я обнаружил, что мне нужно только сделать это с 3 imageViews для его работы:

imageView.contentMode = UIViewContentModeScaleAspectFit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...