Проблема с аспектом поворота UIImageView в iOS UIScrollView

#ios #uiscrollview #uiimageview #orientation

#iOS #uiscrollview #uiimageview #ориентация

Вопрос:

Заранее приношу извинения за недостаток знаний iOS SDK, я разработчик Android, которому было поручено поддерживать и обновлять приложение для iPhone.

Я использую UIScrollView для обработки масштабирования и перетаскивания изображения, которое отображается в UIImageView.

Изображение в UIImageView запрашивается с веб-сервера несколько раз в секунду. При изменении ориентации устройства размеры изображения изменяются на размеры текущего кадра, например, при использовании iPad в портретном режиме размеры изображения будут 768×1024, но при переключении в альбомный режим размеры изображения будут 1024х768. Веб-сервер выполняет работу по добавлению черных полос сверху / снизу или слева / справа от изображения в зависимости от ориентации и соотношения сторон изображения, которое я запрашиваю.

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

Если я не укажу contentMode для UIScrollView, изображение будет выглядеть сжатым, как будто ScrollView пытается отобразить изображение в предыдущих размерах ориентации.

Если я укажу contentMode UIViewContentModeScaleAspectFit для ScrollView и увеличу масштаб до упора, изображение будет выглядеть меньше, чем вид, соотношение сторон правильное, но изображение центрировано, а высота соответствует предыдущей ориентации.

Если я укажу contentMode в UIViewContentModeScaleAspectFill для ScrollView, все отображается правильно, но поскольку при выходе из ScrollView изображение фактически масштабируется до размера экрана, данные масштабирования, которые я использовал, не переводятся должным образом.

Что мне нужно сделать, чтобы установить «базовый размер» UIScrollView на новый размер кадра при изменении ориентации устройства? Или мне не хватает свойства, которое мне нужно установить?

Ответ №1:

Похоже, вы, возможно, не обновляете размер содержимого в режиме прокрутки. Вам нужно сделать что-то вроде

 scrollView.contentSize = newImageSize;
  

Надеюсь, что это все

Комментарии:

1. Спасибо за ответ, к сожалению, я пытался изменить свойство contentSize в нескольких разных местах, и, похоже, это ничего не меняет. В целом, похоже, что это то, что мне нужно изменить, я просто не могу заставить его вести себя так, как мне хотелось бы.

2. После дня игры с опциями я в конечном итоге решил свою проблему, и это было частью этого. Мне пришлось установить contentSize для scrollview, а также установить рамку scrollview на полный размер пустого пространства и установить рамку вида изображения на размер scrollview.

Ответ №2:

Если я правильно понимаю, вы можете использовать zoomToRect:animated: метод в UIScrollView. Затем вы можете установить масштабирование в соответствии с размером изображения.

Комментарии:

1. Я попробую это и расскажу вам, как это работает. Спасибо за ответ