我到处寻找,但无法得到答案。所以,这里。我创建了一个长滚动视图,里面有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;
}
}
问题是它在没有惯性的情况下拍摄(当我抬起手指时),但是当我滑动滚动时,它不会拍打。我猜我可以用速度来处理这个但我不知道怎么做。任何有关让它快速滑动的帮助都将不胜感激!
答案 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];
}
}