实际效果
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