Заставьте UIScrollView всегда заканчиваться в CGPointZero, если не потяните, чтобы обновить - PullRequest
0 голосов
/ 31 января 2012

У меня есть UIView с контентом, и я реализую функцию «тянуть-обновить». Как я могу настроить UIScrollView так, чтобы он всегда возвращался к contentOffset, равному 0,0 (и чтобы он выглядел естественно)?

Я видел множество примеров того, как это делается с помощью UITable View ииметь тягу, чтобы обновить поведение довольно вниз.Кажется, у моей проблемы большой размер контента для размещения скрытого баннера Pull-To-Refresh.Если я прокручиваю содержимое вниз, оно снова будет вверх.Если я потяну контент вверх, он лениво прокручивается назад, но не до той же самой точной позиции.

Я реализовал функцию ниже, которая будет определять, прокручивается ли представление прокрутки.Затем он изменит представление обратно на 0,0.Этот вид работает, но выглядит нервным или запаздывает в анимации.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
    if(moveScrollView)
        [moveScrollView invalidate];

moveScrollView = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveScrollViewToOrigin) userInfo:nil repeats:NO];
}

- (void)moveScrollViewToOrigin;
{    
    if(scrollView.contentOffset.y == 0)
        return;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.2];
    [[self scrollView] setContentOffset:CGPointZero];
    [UIView commitAnimations];
}

Я создал пример проекта с проблемой и моим решением здесь.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Позиция прокрутки, кажется, ведет себя, как и ожидалось, при перемещении содержимого вниз.Это когда экран изначально загружается, баннер для обновления обновляется скрытым сверху, и вы перемещаете контент вверх.Содержание не всегда возвращается так далеко, как должно.Иногда смещение y составляет 40, когда он закончил подпрыгивать.Все это можно проверить с помощью моего примера кода, который я опубликовал.

Поскольку проблема связана с тем, что contentOffset.y больше нуля, я решил отключить это поведение.Я поместил следующее в (void) scrollViewDidScroll: (UIScrollView *) scrollingView;

if(scrollingView.contentOffset.y > 0){
    //content is moving up and the Refresh banner is already hidden

    //disable scrolling
    [[self scrollView] setScrollEnabled:NO];

    //move content back to origin, do not animate        
    CGRect originBounds = self.scrollView.bounds;
    originBounds.origin.y = 0.0f;
    [[self scrollView] scrollRectToVisible:originBounds animated:NO];

}else
{
    [[self scrollView] setScrollEnabled:YES];        
}
0 голосов
/ 31 января 2012

Вы пробовали -scrollRectToVisible:animated:?Это заставляет представление прокрутки выполнять фактическую прокрутку (которая вызовет -scrollviewDidScroll:, и анимирует его как обычное действие прокрутки к указанному кадру в пределах его области содержимого.

[[self scrollView] scrollRectToVisible:self.scrollView.bounds animated:YES];

должно дать вам хорошее и плавноепрокрутка действий до начала координат.

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