#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. Я попробую это и расскажу вам, как это работает. Спасибо за ответ