首先,我们公司的轮播图有点BUG.使用UICollectionView重写之后,发现一个问题.
就是.UICollectionView定位需要UICollectionViewFlowLayout
类中的下面的方法.
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
然而使用这个方法的时候如果pagingEnabled设置为YES,那么系统计算的位置会覆盖你的位置.pagingEnabled为NO的时候.通过上面的方法把位置计算正确的之后.发现.如果拖动的范围比较小.返回中线的速度还比较快.当返回距离比较长的时候.返回的速度就变得十分的慢了.
重点来了,如何在禁用pagingEnabled的情况下使用pagingEnabled的效果
看起来pagingEnabled效果十分的高大上,其实,在自己写框架玩的时候也深刻的感受到,这种BOOL值一般都是依赖了一些已有的属性,那么自然而然的发现pagingEnabled的效果和自己写的效果的不同仅仅在于滚动的速度不同.那么,目标就变成了找寻UICollectionView的滚动速度了.
搜了半天没搜到speed有关的.但是,我找到了decelerationRate
@property(nonatomic) UIScrollViewDecelerationRate decelerationRate NS_AVAILABLE_IOS(3_0);
这个属性:减速速率
UIKIT_EXTERN const UIScrollViewDecelerationRate UIScrollViewDecelerationRateNormal NS_AVAILABLE_IOS(3_0);
UIKIT_EXTERN const UIScrollViewDecelerationRate UIScrollViewDecelerationRateFast NS_AVAILABLE_IOS(3_0);
一个正常,一个快速,那么我们现在肯定是正常咯.如下设置之后完美解决问题
self.collectionView.decelerationRate = UIScrollViewDecelerationRateFast;
优化
可能有的同学觉得这个Fast速度太快.咱们点进去UIScrollViewDecelerationRate里面去
typedef CGFloat UIScrollViewDecelerationRate NS_TYPED_ENUM;
UIKIT_EXTERN const UIScrollViewDecelerationRate UIScrollViewDecelerationRateNormal NS_AVAILABLE_IOS(3_0);
UIKIT_EXTERN const UIScrollViewDecelerationRate UIScrollViewDecelerationRateFast NS_AVAILABLE_IOS(3_0);
嗯,对它就是一个CGFloat
类型 | 值 |
---|---|
UIScrollViewDecelerationRateNormal | 0.998 |
UIScrollViewDecelerationRateFast | 0.98999999999999999(0.99) |
经过测试.大于1.0的数和1.0没啥区别.越接近1.0,自动滚回的速度越慢.月接近0.0越快.