ios UIScrollView 匀速滚动

作者: 整个夏天 | 来源:发表于2017-06-22 11:43 被阅读187次
实际效果
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/scrollDemo.git

相关文章

网友评论

    本文标题:ios UIScrollView 匀速滚动

    本文链接:https://www.haomeiwen.com/subject/hgixcxtx.html