scrollViewDidEndDecelerating не вызывается - PullRequest
2 голосов
/ 17 марта 2011

У меня есть UIScrollView, который содержит большие изображения, и я использую подкачку для прокрутки между изображениями. Для экономии памяти я загружаю только одно изображение до и после видимого в данный момент изображения и загружаю / выпускаю новые изображения после завершения прокрутки. Проблема возникает, когда прокручивается быстро и scrollViewDidEndDecelerating не вызывается. Когда вызывается scrollViewDidEndDecelerating, я хотел отобразить имя изображения на активной странице.

Как мне это решить? Почему это происходит?

Ответы [ 5 ]

0 голосов
/ 25 февраля 2019

Проверьте, установлен ли ваш UIScrollView делегат или нет, или был задан ноль.

Обычно устанавливается таким образом scrollView.delegate = self.

0 голосов
/ 17 октября 2017

scrollViewDidEndDragging будет вызываться после завершения каждой прокрутки

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

scrollViewDidEndDecelerating не вызывать при каждом перетаскивании (если вы не перетаскиваете со скоростью доступа после перетаскивания, остановите ееникогда не будет вызывать эту функцию)

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{}

scrollViewDidEndScrollingAnimation, если вы хотите переместить представление прокрутки, используйте api, а не drag, этот API будет вызываться.

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{}
0 голосов
/ 20 января 2012

Я делаю то же самое с представлением прокрутки - ленивая загрузка изображений.На самом деле нам пришлось загрузить эскиз, который растягивается (делая размытую версию изображения в низком разрешении), а затем загрузить реальное изображение, когда страница отображается на 100%.

Что мне нужно было сделатьБыл использован следующий код в scrollViewDidScroll: scrollView.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{    
    if (!_isCurrentlyRotating) {
        CGFloat pageWidth = _scrollView.frame.size.width;
        int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth)+1;

        if (_currentPage != page)
            [self setCurrentPage:page];
    }
}

Выше вычисляется страница, которая будет отображаться (как ваша прокрутка).Это на самом деле изменит номер текущей страницы, когда просмотр страницы отображается на 50%.Это может использоваться в сочетании с элементом управления страницей для выделения текущей точки страницы.

Использование вышеизложенного (с включенной подкачкой в ​​представлении прокрутки), когда пользователь использует свой палец для изменения страницы (нормальное поведение) scrollViewDidEndDecelerating: scrollView вызывается, когда страница отображается на 100%.Под 100% я имею в виду, что вы можете видеть только одну страницу, не являющуюся частью другой части.

Но у нас есть кнопка «Начать заново» в конце представления прокрутки, которая вызывает мою функцию scrollToPage:.

- (void) scrollToPage:(int)page {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * page;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;
    [self.scrollView scrollRectToVisible:frame animated:YES];
}

Использование scrollRectToVisible: animated: метод не вызывает метод scrollViewDidEndDecelerating: поэтому я просто добавил метод повышения резкости (который просто загружает изображение с высоким разрешением в представлении изображения) для обоих методов, чтобы он вызывалсяесли пользователь прокручивает или нажимает кнопку «Пуск поверх».

- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    [self sharpenImageView];
}

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [self sharpenImageView];
}

Надеюсь, это поможет!

0 голосов
/ 03 января 2017

Иногда просто очищайте ваш проект и перезапускайте

Shift & Cmd & K Shift & Cmd & Alt & k

0 голосов
/ 18 июля 2011

scrollViewDidEndDecelerating: не предназначен для создания макета вашей страницы. Вы должны реализовать scrollViewDidScroll: и рассчитать видимые в данный момент страницы на основе contentOffset представления прокрутки.Если видимый диапазон изменился, добавьте представления для ранее невидимых страниц и удалите те, которые больше не отображаются.

...