Цикл UIScrollView с взаимодействием с пользователем - PullRequest
0 голосов
/ 15 июля 2010

У меня есть циклический scrollView, но я хочу, чтобы пользователь мог ускорить прокрутку, взаимодействуя с scrollView (т.е. прокручивая их пальцем), если он выберет. Нужно ли выполнять дополнительную работу, чтобы добиться этого, поскольку в данный момент анимированная прокрутка имеет приоритет над взаимодействием с пользователем и резко замедляет прокрутку. Кто-нибудь делал что-то подобное? В качестве примера я собираюсь добиться того же эффекта, который использовался на экране about в игре Angry Birds?

Большое спасибо

Здесь используется код для базовой анимации вида прокрутки

[UIView beginAnimations:@"scroll " context:nil];
[UIView setAnimationDuration:15];

[scrollView setContentOffset:CGPointMake(0, 600) animated:NO];
[UIView commitAnimations];

Как только пользователь пытается прокрутить, scrollView слегка прокручивает (он очень немного перемещается), затем останавливает действие прокрутки пользователя и продолжает анимированную прокрутку? Таким образом, общий вид выглядит следующим образом:

1. анимация прокрутки 2. пользователь пытается прокрутить и анимация появляется, чтобы придерживаться 3. когда пользователь заканчивает прокрутку, анимация продолжается Есть мысли?

Большое спасибо еще раз.

1 Ответ

1 голос
/ 17 июля 2010

Если я понимаю, что вы пытаетесь сказать, вам нужна непрерывная медленная прокрутка (600 пикселей на 15 секунд), которая может быть отменена пользователем.

Если это то, что вы хотите, я 'Я бы использовал другой подход, чем этот.Анимация, которую вы запускаете, когда запускается, вероятно, будет просто делать то, что ей говорят, в то время как пользователь также взаимодействует, и все это будет очень грязно.прокрутка движения, один пиксель за раз.Тогда пользователь все еще может свободно взаимодействовать.

что-то вроде:

...
NSTimer *slow = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(scrollALittle:) userInfo:nil repeats:YES];
...
// maybe, somewhere:
[slow invalidate];

-(void)scrollALittle:(NSTimer*)theTimer
{
    CGPoint offset = scrollview.contentOffset;
    offset.y+=4; // 10 times 4 pix a second makes 600px/15 seconds.
    // add check on max y?

    // these checks are deliberately placed as close as possible to the contentOffset assignment
    if ( scrollview.tracking ) return;
    if ( scrollview.dragging ) return;
    if ( scrollview.zooming ) return;
    if ( scrollview.decelerating ) return;

    scrollview.contentOffset = offset;
}

конечно, вы можете многое здесь сделать, но это может быть отправной точкой.

...