Как мне сбросить (то есть, не увеличить) UIScrollView? - PullRequest
1 голос
/ 04 марта 2009

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

Ответы [ 2 ]

2 голосов
/ 08 мая 2009

У меня есть подробное обсуждение того, как (и почему) работает масштабирование UIScrollView на github.com / andreyvit / ScrollingMadness / .

(Ссылка также содержит описание того, как программно масштабировать UIScrollView, как эмулировать пейджинг в стиле библиотеки фотографий + масштабирование + прокрутка, пример проекта и класс ZoomScrollView, который включает в себя некоторые из методов магии масштабирования.)

Цитата:

UIScrollView не имеет понятия «текущий уровень масштабирования», потому что у каждого подпредставления, которое он содержит, может быть свой собственный текущий уровень масштабирования. Обратите внимание, что в UIScrollView нет поля для сохранения текущего уровня масштабирования. Однако мы знаем, что кто-то сохраняет этот уровень масштабирования, потому что, если вы сузите масштабирование подпредставления, затем сбросите его преобразование до CGAffineTransformIdentity, а затем снова нажмите, вы заметите, что предыдущий уровень масштабирования подпредставления был восстановлен.

Действительно, если вы посмотрите на дизассемблирование, это UIView сохраняет свой собственный уровень масштабирования (внутри объекта UIGestureInfo, на который указывает поле _gestureInfo). Он также имеет набор хороших недокументированных методов, таких как zoomScale и setZoomScale:animated:. (Имейте в виду, у него также есть куча методов, связанных с вращением, возможно, скоро мы получим поддержку жестов вращения.)

Однако, если мы создадим новый UIView только для масштабирования и добавим наш реальный масштабируемый вид в качестве его дочернего элемента, мы всегда начнем с уровня масштабирования 1,0. Моя реализация программного масштабирования основана на этом приеме.

0 голосов
/ 04 марта 2009

Если вы не перерисовываете свой вид после завершения события масштабирования пинча, тогда коэффициент масштабирования устанавливается свойством transform вида, который вы возвращаете из метода viewForZoomingInScrollView: делегат. Чтобы сбросить это масштабирование, задайте для свойства преобразования представления значение CGAffineTransformIdentity.

Остерегайтесь, однако, что ваша следующая операция масштабирования пинча начнется с того места, где предыдущий масштаб увеличения прекратился (то есть ваш новый масштаб будет проигнорирован). Чтобы обойти это, вам может потребоваться реализовать некоторые из описанных мной здесь .

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