自定义UICollectionViewFlowLayout
来源:互联网 发布:网络用语jqk什么意思 编辑:程序博客网 时间:2024/06/01 22:51
系统给我们一个线性布局FlowLayout,但是满足不了我们的需求,所以需要自定义一个FlowLayout(可以继承FloaLayout,也可以继承layout),这里我继承了FlowLayout
#import <UIKit/UIKit.h>@interface KSCollectionViewFlowLayout : UICollectionViewFlowLayout@end
下面我们需要重写里面的三个方法
//这个方法可以设置cell落在中间的位置/** * 返回一个Point,让collectionView 停在这个点上 * @param proposedContentOffset collectionView 系统预计要停止的点 * @param velocity 速度 */- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity;
/** * @param rect 当前collctionView展示的区域 * @return 返回一个UICollectionViewLayoutAttributes数组,详情查看UICollectionViewLayoutAttributes各种属性 */ - (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect;
//返回YES 当CollectionView只要滚动就调用上面两个方法,默认返回NO,在适当的时候调用上面两个方法- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds;
具体实现方法
实现这个方法能使滚动停止后始终让item落在中间位置
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ //1.首先拿到预计滚动停止后展示的item [super layoutAttributesForElementsInRect:rect] CGRect rect = CGRectMake(proposedContentOffset.x, proposedContentOffset.y, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height); NSArray* attArray = [super layoutAttributesForElementsInRect:rect]; //2.找到距离中间最近的item CGFloat minMargin = MAXFLOAT; for (UICollectionViewLayoutAttributes* att in attArray) { CGFloat margin = att.center.x - proposedContentOffset.x - self.collectionView.bounds.size.width * 0.5; if (ABS(minMargin) > ABS(margin)) { minMargin = margin; } } //3.修改collectionView预计滚动的位置,正巧落在中间item的上面 proposedContentOffset.x += minMargin; return proposedContentOffset;}
实现这个方法能改变item的缩放效果
- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect{ //1.首先拿到预计滚动停止后展示的item [super layoutAttributesForElementsInRect:rect] NSArray* attArray = [super layoutAttributesForElementsInRect:rect]; for (UICollectionViewLayoutAttributes* att in attArray) { //2.遍历各个item,根据位置来改变缩放效果 CGFloat distance = att.center.x - self.collectionView.contentOffset.x - self.collectionView.bounds.size.width * 0.5; CGFloat scale = 1- ABS(distance) / self.collectionView.bounds.size.width; att.transform = CGAffineTransformMakeScale(scale, scale); } //返回item return attArray;}
实现这个方法,只要滚动就调用上面两个方法,实时更新
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ return YES;}
0 0
- 自定义UICollectionViewFlowLayout
- 自定义UICollectionViewFlowLayout
- 自定义UICollectionViewFlowLayout
- UI_UICollectionView_自定义UICollectionViewFlowLayout
- UICollectionViewFlowLayout自定义(圆圈)
- ios-自定义UICollectionViewFlowLayout
- 自定义UICollectionViewFlowLayout实现相册功能
- 自定义UICollectionViewFlowLayout实现section悬浮
- UICollectionViewFlowLayOut
- 练习:圆环效果(自定义 UICollectionViewFlowLayOut)
- iOS开发进阶之旅-自定义UICollectionViewFlowlayout
- 自定义UICollectionViewFlowLayout进行瀑布流布局
- Swift 自定义 UICollectionViewFlowLayout 实现横向布局分页
- UICollectionViewFlowLayout备忘录
- UICollectionViewFlowLayout详解
- UI一揽子计划 21 (UICollectionView、SDWebImage第三方类库加载图片的使用、集合视图的布局UICollectionViewFlowLayout 、自定义Cell、布局协议
- UICollectionView详解二:UICollectionViewFlowLayout
- iOS-UICollectionViewFlowLayout 流水布局
- 机器学习基础(三十) —— 线性回归、正则化(regularized)线性回归、局部加权线性回归(LWLR)
- swift-UITabBarController 设置选中和未选中状态文字图片颜色或使用原图
- ios:画直线和虚线
- Intellij IDEA 的使用
- 百度地图开发(一)——地图定位
- 自定义UICollectionViewFlowLayout
- Redis源码解析:12AOF持久化
- java接口可以实例化吗?
- 脉络清晰的BP神经网络讲解,赞
- HDC,CDC,CClientDC的区别和联系是什么?
- Codeforces #6B. President's Office (DFS)
- HDU--1166敌兵布阵(线段树)
- CreateCompatibleDC 和 CreateCompatibleBitmap
- iOS开发者程序许可协议之简单介绍