Как определить, прокручивается ли страница в ScrollView? - PullRequest
1 голос
/ 18 марта 2011

У меня есть ScrollView для отображения страниц PDF.Когда я прокручиваю, это показывает мне вторую страницу с включенной подкачкой в ​​ScrollView.Я установил свойство отказов false для прокрутки.Я хочу отобразить номер страницы, которая отображает страницу.Для этого я использовал следующий код ..

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

if (scrollView == scrlView) {   
    if (lastContentOffsetX > scrollView.contentOffset.x) {

        if (currentPage > 1) {
            currentPage--;
            self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
        }
    }       
    else if (lastContentOffsetX < scrollView.contentOffset.x) {
        if (currentPage < totalPages) {
            currentPage++;
            self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
        }
    }
    lastContentOffsetX = scrollView.contentOffset.x;
}
}

У меня нет проблем, если каждый раз, когда я перетаскиваю и страница меняется.Некоторое время я тяну очень мало времени, и страница не меняется и остается прежней.Номер моей страницы увеличивается / уменьшается.

Может ли кто-нибудь тело сказать мне, могу ли я получить какое-либо событие, когда ScrollView останавливает прокрутку, я могу получить текущее смещение и выполнить свою задачу.

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Вы изменяете номер своей страницы каждый раз, когда пользователь перетаскивает представление прокрутки - просто используя тот факт, что перетаскивание произошло, вы предполагаете, что страница изменилась - это не всегда так. В вашем коде просто рассчитайте текущую страницу из смещения содержимого и ширины страницы. Таким образом, вы можете рассчитать номер текущей страницы (на основе 0):

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

   if (scrollView == scrlView) {   
       CGFloat xOffset = scrollView.contentOffset.x;
       int currentPage = floor(xOffset / scrollView.bounds.size.width);
       self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
   }
}

Также вы можете использовать неправильный метод делегата - я бы использовал scrollViewDidScroll: метод вместо

P.S. чтобы показать номер страницы, которая в настоящее время занимает более половины экрана, измените код на:

int currentPage = floor(xOffset / scrollView.bounds.size.width + 0.5);
1 голос
/ 18 марта 2011

Вы можете использовать метод делегата UIScrollView.

- (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView

Пожалуйста, обратитесь к документации Справочник по протоколу UIScrollViewDelegate

0 голосов
/ 18 марта 2011

Попробуйте

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

и / или

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
...