gpt4 book ai didi

ios - 像 Instagram 那样限制 UITableView 的滚动速度

转载 作者:IT王子 更新时间:2023-10-29 08:11:23 27 4
gpt4 key购买 nike

我正在尝试限制我的 UITableView 的滚动速度,就像 Instagram 所做的那样。

如果您查看 Instagram,您会注意到它们对您滚动浏览提要的速度有限制。

它不是使用“decelerationRate”设置的,因为限制不影响减速。它只会影响您滚动提要的速度。因此,如果您尝试执行“轻弹”手势,您将达到 Instagram 的最大滚动速度,并且不会像普通 UITableView 那样快。

对 Instagram 如何做到这一点有什么猜测吗?

最佳答案

TableView有一个属性scrollView,这个属性会返回TableView内部的scrollView。使用以下...

tableview.scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

另一种方式:

TableView 会响应 scrollView delegate,所以我们需要像这样实现 scrollView 的 delegate:

获取这些全局变量:

CGPoint lastOffset;
NSTimeInterval lastOffsetCapture;
BOOL isScrollingFast;

像这样实现 scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {    
CGPoint currentOffset = scrollView.contentOffset;
NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];

NSTimeInterval timeDiff = currentTime - lastOffsetCapture;
if(timeDiff > 0.1) {
CGFloat distance = currentOffset.y - lastOffset.y;
//The multiply by 10, / 1000 isn't really necessary.......
CGFloat scrollSpeedNotAbs = (distance * 10) / 1000; //in pixels per millisecond

CGFloat scrollSpeed = fabsf(scrollSpeedNotAbs);
if (scrollSpeed > 0.5) {
isScrollingFast = YES;
NSLog(@"Fast");
} else {
isScrollingFast = NO;
NSLog(@"Slow");
}

lastOffset = currentOffset;
lastOffsetCapture = currentTime;
}
}

然后像这样实现scrollViewDidEndDragging:

- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if( !decelerate )
{
NSUInteger currentIndex = (NSUInteger)(scrollView.contentOffset.x / scrollView.bounds.size.width);

[scrollView setContentOffset:CGPointMake(scrollView.bounds.size.width * currentIndex, 0) animated:YES];
}
}

希望这对你有帮助...

关于ios - 像 Instagram 那样限制 UITableView 的滚动速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com