设置UICollectionView滑动终止时的停止位置

1.以UICollectionView的父类思考

首先,UICollectionView和UITableView都拥有着UIScrollView父类.可以在UIScrollView停止滚动之后"修复"滚动位置.

如何检测UIScrollView停止滚动,详见UIScrollView及其子类停止滚动的监测.

可以在停止滚动之后修复位置.
但是效果不太好.因为UICollectionView滚动不是一种匀速的过程.

2.使用UICollectionViewFlowLayout的内部方法.

UICollectionView的创建需要一个UICollectionViewLayout的对象来进行.这个UICollecionViewLayout咱们一般使用UICollectionViewFlowLayout或者是UICollectionViewFlowLayout的子类.因为这个类帮我们处理了一些事情.

我们是通过下面的方法来实现停止定位的.

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

首先,如果咱们不对item的大小做变换的话,直接使用上面的方法就OK.但是如果有变换的话,我们需要重写下面的方法来获取item的布局信息然后返回出去

- (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
1.首先计算出item的大小,分为对item大小变换了的需要重写计算布局信息方法的和没有对item大小进行操作可以直接进入下一步两种,
2.然后调用super的这个方法得到系统默认会滚动到的地方.然后获取了loc之后调用[self layoutAttributesForElementsInRect:rect].rect为loc和self.collectionView的宽高.
3.计算隔中线的距离然后在super出的loc的距离上修复距离中线的距离就OK了.

注:第二种方法需要把UICollectionView的pagingEnabled设置为NO,pagingEnabled会在当前的基础上给你"修复"一下

下面我写的轮播图里头用到了这个,大家没事可以进去看看
样例代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值