当重写scrollviewwillenddrag时,UIScrollView并不总是动画减速



这是我的覆盖代码-它只是计算在哪里捕捉:

- (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;
}

当我按住手指超过一到两秒来拖动滚动视图,然后抬起手指时,它通常会移动到位。然而,当我做一个快速"轻弹"它很少动画-它只是捕捉到targetcontenttoffset。我正在尝试模拟默认分页行为(除了尝试捕捉到自定义位置)。

任何想法?

我最终不得不手动动画它。在同一个函数中,我将targetContentOffset设置为用户离开的位置(当前的contenttoffset),这样它就不会触发它自己的动画,然后我将contenttoffset设置为我的计算。此外,我还添加了一个速度检查来触发"自动"页面更改。它不是完美的,但希望它能帮助其他人解决同样的问题。

(我为了可读性修改了上面的函数,因为没有人需要看到我的计算)

- (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];
}

相关内容

  • 没有找到相关文章

最新更新