像Instagram一样限制UITableView滚动速度

我试图限制我的UITableView的滚动速度,就像Instagram一样。

如果您查看Instagram,您会发现他们对滚动浏览Feed的速度有限制。

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

有关Instagram如何实现这一点的任何猜测?

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

 tableview.scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 

其他方式:

TableView将响应scrollView委托,因此我们需要实现scrollView的委托,如:

拿这些全局变量:

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

希望这可以帮助你……

用这个:

 self.tableview.scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 

由于tableView是UIScrollView的子类,因此ScrollView委托将在此处运行。 希望这可以帮助.. :)

编辑:

如果tableView没有显示scrollView属性使用:

 self.tableView.decelerationRate