iPhone UIScrollView,减缓滚动速度

4

我应该如何为UIScrollView的物理效果添加一些额外的阻力。它滚动得有点太快了,不符合我的需求。(我不想完全禁用,我仍然喜欢到达视图的末尾或开头时的橡皮筋效果。) 有没有办法减慢它的速度?

4个回答

19

事实上,在阅读文档后,我发现了UIScrollView的一个可以减缓滚动速度的属性,所以苹果确实为其他寻找此功能的人提供了便利:

scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

虽然它写着“快速”,但实际上是加速减速,从而使滚动减慢。这正是我所需要的。并且不必担心专利问题。:)


3
实际上,您可以使用 ScrollToRowAtIndexPath 来制作块动画:... 并将 animated 设置为 NO。这样,块动画将手动使用所选时间动画底层变量。

1
作为UICollectionViewUIScrollView的子类,您可以使用滚动视图代理方法。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    targetContentOffset->x = (targetContentOffset->x - scrollView.contentOffset.x) / 6 + scrollView.contentOffset.x;
    targetContentOffset->y = (targetContentOffset->y - scrollView.contentOffset.y) / 6 + scrollView.contentOffset.y;   
}

0

目前来说这是不可能的。也许有一天苹果会扩展API以允许它,但在那一天到来之前,你只能使用默认速度。

唯一的其他选择是自己实现滚动。如果你想要所有漂亮的效果,比如橡皮筋效果和滚动时水平或垂直锁定的方式,那么这并不容易。更不用说用手指轻弹来滚动了。

此外,苹果拥有一些滚动行为的专利,因此编写自己的滚动实现甚至可能是危险的。来源:"苹果的触摸屏专利"

一台计算设备,包括:一个触摸屏显示器;一个或多个处理器;内存;和一个或多个程序,其中一个或多个程序存储在内存中并配置为由一个或多个处理器执行,其中一个或多个程序包括:用于检测与触摸屏显示器的一个或多个手指接触的指令;用于将一个或多个启发式应用于一个或多个手指接触以确定设备的命令的指令;以及用于处理命令的指令;其中一个或多个启发式包括:用于确定一个或多个手指接触是否对应于一维垂直屏幕滚动命令而不是基于手指接触的初始移动角度的二维屏幕平移命令的垂直屏幕滚动启发式;用于确定一个或多个手指接触是否对应于二维屏幕平移命令而不是一维垂直屏幕滚动命令的基于手指接触的初始移动角度的二维屏幕平移启发式;以及用于确定一个或多个手指接触是否对应于从显示一组项目中的各自项目转换为显示该组项目中的下一个项目的命令的下一个项目启发式。但当然,我不是律师。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接