ios UIScrollView 匀速滚动

实际效果
Untitled.gif
需求描述

tableView显示的列表中需要自动滚动内容,于是使用如下方法使tableView滚动.

[self.tableView setContentOffset:CGPointMake(0, 100)animated:YES];

然而滚动的效果并不理想,因为滚动的时间,以及加速,减速等一系列的参数都无法设置,最后出来的效果就是瞬间滚动到了指定位置,而且是先加速后减速的效果.

解决思路

scrollView的滚动效果是一个动画,那么动画肯定会有一个执行时间和一个Timing参数,所以只要能修改到这两个参数就可以达到想要的效果.

Timing有四种模式,这个也是可以自己写出来的

CA_EXTERN NSString * const kCAMediaTimingFunctionLinear//匀速
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseIn//加速
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseOut//减速
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseInEaseOut//先加速,后减速

当滑动的时候将动画设置为kCAMediaTimingFunctionLinear即可实现匀速的滑动.不过这个参数系统是不对外开放的,可以通过runTime机制获取.

github上找到一个写好的category可以直接使用:
https://github.com/jlott1/UIScrollView-ScrollAnimation
使用例子:

CAMediaTimingFunction * timing=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[self.tableView setContentOffset:CGPointMake(0, self.tableView.contentOffset.y+44) withTimingFunction:timing duration:1];

Demo地址:
https://github.com/StoneMover/alldemo/tree/master/scrollTest

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容