UIScrollView не всегда анимирует замедление при переопределении scrollViewWillEndDragging

Вот мой код переопределения - он просто вычисляет, куда привязать:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

    if(targetContentOffset->y < 400) {
        targetContentOffset->y = 0;
        return;
    }

    int baseCheck = 400;

    while(baseCheck <= 10000) {
        if(targetContentOffset->y > baseCheck && targetContentOffset->y < baseCheck + 800) {
            targetContentOffset->y = (baseCheck + 340);
            return;
        }
        baseCheck += 800;
    }

    targetContentOffset->y = 0;
}

Когда я удерживаю палец в течение более одной или двух секунд, чтобы перетащить вид прокрутки, а затем поднимаю палец, он обычно оживляет на месте. Однако, когда я делаю быстрый "щелчок", он редко оживляет - он просто привязывается к targetContentOffset. Я пытаюсь эмулировать поведение подкачки по умолчанию (кроме попыток привязки к пользовательским позициям).

Есть идеи?

1 ответ

Мне пришлось анимировать это вручную. В той же функции я установил targetContentOffset в том месте, где остановился пользователь (текущий contentOffset), чтобы он не запускал собственную анимацию, а затем я установил contentoffset для своего вычисления. Кроме того, я добавил проверку скорости, чтобы вызвать автоматические изменения страницы. Это не идеально, но, надеюсь, это поможет другим с той же проблемой.

(Я изменил вышеупомянутую функцию для удобства чтения, поскольку никто не должен видеть мои вычисления)

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

    CGPoint newOffset = CGPointMake(targetContentOffset->x, targetContentOffset->y);
    *targetContentOffset = CGPointMake([broadsheetCollectionView contentOffset].x, [broadsheetCollectionView contentOffset].y);

    if(velocity.y > 1.4) {
        newOffset.y += pixelAmountThatWillMakeSurePageChanges;
    }
    if(velocity.y < -1.4) {
        newOffset.y -= pixelAmountThatWillMakeSurePageChanges;
    }

    // calculate newoffset

    newOffset.y = calculatedOffset;
    [scrollView setContentOffset:newOffset animated:YES];
}
Другие вопросы по тегам