2011-10-24 2 views
6

У меня есть горизонтальный UIScrollview настроен (это означает, что он не один, который прокручивается вверх и вниз, но тот, который только прокручивает влево-вправо), и при запуске приложения я хочу, чтобы этот прокрутка просматривал себя слева, а затем правый - вид «демонстрируя» свою способность прокручивать - и, наконец, останавливается, позволяя пользователю затем взять и управлять свитком вручную пальцем. Все работает - за исключением этой демонстрации прокрутки влево-влево.Как вы программно заставляете прокрутку использовать 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? Но если да, то как?

Любые идеи?

ответ

5

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

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

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

+0

Вы имеете в виду что-то вроде этого? CGRect frame = CGRectMake (800, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; frame = CGRectMake (0, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; потому что это не сработало ... – sirab333

+0

Для # 1, да, но вам не нужно делать 'frame' вы прокручиваете до размера всего вида. Вы можете сделать 'CGRectMake (800, 0, 1, 1)', если хотите, а затем 'CGRectMake (0, 0, 1, 1)'. Чтобы прокрутить область с 800 пикселей до 1600 пикселей, вы можете прокрутить до «(1599, 0, 1, 1)», а затем прокрутить область от 0 до 800 обратно на просмотр, вы можете прокрутить до «(0 , 0, 1, 1). – darvids0n

+0

oh ok давайте попробуем это в viewDidAppear ... – sirab333

Смежные вопросы