Как вы программно форсируете прокрутку, используя UIScrollView? - PullRequest
6 голосов
/ 24 октября 2011

У меня есть горизонтальный UIScrollview настроен (имеется в виду не тот, который прокручивает вверх и вниз, а тот, который прокручивает только влево-вправо), и после запуска приложения я хочу, чтобы этот скроллвью прокручивался сам влево,затем вправо - своего рода «демонстрация» своей способности прокрутки - и, наконец, затем остановка, позволяя пользователю затем взять и управлять прокруткой вручную с помощью пальца.Все работает - кроме этой демонстрации прокрутки влево-вправо под нагрузкой.

Я не использую Interface Builder для всего этого, я делаю все с кодом:

//(this is in viewDidLoad:)
// Create the scrollView:
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)];
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView
[mainView addSubview:photosScroll];


// Set the photoScroll's delegate: 
photosScroll.delegate = self;

// Create a frame to which to scroll:   
CGRect frame = CGRectMake(10, 10, 80, 150);
// Scroll to that frame:
[photosScroll scrollRectToVisible: frame animated:YES];

Итак, scrollView загружается успешно, и я могу прокрутить его влево ипрямо с моим пальцем - но это не делает эту "автопрокрутку", как я надеялся, что будет.

  • Я пытался вызвать scrollRectToVisible до и после добавления scrollView в качестве подпредставления - не сработало.
  • Думая, может быть, это должно произойти в loadView, а не в viewDidLoad?Но если да, то как?

Есть идеи?

1 Ответ

5 голосов
/ 24 октября 2011

Несколько способов сделать это:

  1. Используйте scrollRectToVisible:animated: для нулевого значения X, а затем для большого положительного значения, затем установите его обратно в среднюю точку,Вы можете вызвать метод после добавления представления прокрутки в качестве подпредставления (возможно, и раньше, но лучше всего быть в безопасности).Вам нужно будет рассчитать, какое значение X находится за пределами экрана слева, используя contentSize и знания о том, насколько широки ваши различные элементы в представлении прокрутки.
  2. Поскольку вы просто делаете быстрыйанимация и даст пользователю контроль, это действительно может быть быстрой и грязной анимацией, поэтому вы можете использовать setContentOffset:animated:, чтобы заставить содержимое прокрутки перемещаться относительно вашей текущей позиции просмотра.Переместите элементы вправо для левой прокрутки (положительное значение X), затем в два раза дальше для правой прокрутки (отрицательное значение X), а затем установите смещение обратно на ноль.

Вы не должныпоместите любой из них в viewDidLoad или loadView;поместите их в viewDidAppear, то есть после того, как ваше прокручиваемое изображение будет отображено на экране.Анимации вас волнуют только тогда, когда пользователь может их видеть!

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