scrollViewWillEndDragging Snap to View

时间:2014-04-13 20:07:23

标签: ios objective-c uiscrollview

我到处寻找,但无法得到答案。所以,这里。我创建了一个长滚动视图,里面有568像素(全屏)视图。当用户向下滚动时,我希望滚动视图捕捉到某些位置。这是我的代码:

    -(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    if (aboutScroller.contentOffset.y >= 468 && aboutScroller.contentOffset.y <= 668) {
        targetContentOffset->y = 568;
    } else if (aboutScroller.contentOffset.y >= 1036 && aboutScroller.contentOffset.y <= 1236) {
        targetContentOffset->y = 1136;
    } else if (aboutScroller.contentOffset.y >= 1604 && aboutScroller.contentOffset.y <= 1804) {
        targetContentOffset->y = 1704;
    }
}

问题是它在没有惯性的情况下拍摄(当我抬起手指时),但是当我滑动滚动时,它不会拍打。我猜我可以用速度来处理这个但我不知道怎么做。任何有关让它快速滑动的帮助都将不胜感激!

2 个答案:

答案 0 :(得分:2)

这是因为滑动UIScrollView只会调用...Decelerating方法。请参阅UIScrollViewDelegate

的文档

答案 1 :(得分:2)

对于任何需要解决这个问题的人来说,丹尼尔在上面都是正确的,但我只是想说出自己的意思。

首先,如果用户没有惯性滚动,则添加设置contentOffset的方法:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
  if (_aboutScroller.contentOffset.y >= 468 && _aboutScroller.contentOffset.y <= 668) {
        targetContentOffset->y = 568;
    } else if (_aboutScroller.contentOffset.y >= 1036 && _aboutScroller.contentOffset.y <= 1236) {
        targetContentOffset->y = 1136;
    } else if (_aboutScroller.contentOffset.y >= 1604 && _aboutScroller.contentOffset.y <= 1804) {
        targetContentOffset->y = 1704;
    } else if (_aboutScroller.contentOffset.y >= 2172 && _aboutScroller.contentOffset.y <= 2372) {
        targetContentOffset->y = 2272;
    }
}

接下来,如果用户使用惯性滚动,则添加设置contentOffset的方法:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (_aboutScroller.contentOffset.y >= 468 && _aboutScroller.contentOffset.y <= 668) {
        [_aboutScroller setContentOffset:CGPointMake(0, 568) animated:YES];
    } else if (_aboutScroller.contentOffset.y >= 1036 && _aboutScroller.contentOffset.y <= 1236) {
        [_aboutScroller setContentOffset:CGPointMake(0, 1136) animated:YES];
    } else if (_aboutScroller.contentOffset.y >= 1604 && _aboutScroller.contentOffset.y <= 1804) {
        [_aboutScroller setContentOffset:CGPointMake(0, 1704) animated:YES];
    } else if (_aboutScroller.contentOffset.y >= 2172 && _aboutScroller.contentOffset.y <= 2372) {
        [_aboutScroller setContentOffset:CGPointMake(0, 2272) animated:YES];
    }
}