UICollectionView 小总结 ---UICollectionViewFlowLayout
来源:互联网 发布:淘宝猫 编辑:程序博客网 时间:2024/06/04 18:37
1.只要显示的边界发生改变就重新布局
/** * 只要显示的边界发生改变就重新布局: 内部会重新调用prepareLayout和layoutAttributesForElementsInRect方法获得所有cell的布局属性 */- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ return YES;}
2.用来设置collectionView停止的滚动的那一刻的位置
/** * 用来设置collectionView停止滚动那一刻的位置 * * @param proposedContentOffset 原本collectionView停止滚动那一刻的位置 * @param velocity 滚动速度 */- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ // 1.计算出scrollView最后会停留的范围 CGRect lastRect; lastRect.origin = proposedContentOffset; lastRect.size = self.collectionView.frame.size; // 计算屏幕最中间的x CGFloat centerX = proposedContentOffset.x + self.collectionView.frame.size.width * 0.5; // 2.取出这个范围内的所有属性 NSArray *array = [self layoutAttributesForElementsInRect:lastRect]; // 3.遍历所有属性 CGFloat adjustOffsetX = MAXFLOAT; for (UICollectionViewLayoutAttributes *attrs in array) { if (ABS(attrs.center.x - centerX) < ABS(adjustOffsetX)) { adjustOffsetX = attrs.center.x - centerX; } } return CGPointMake(proposedContentOffset.x + adjustOffsetX, proposedContentOffset.y);}
3.初始化工作的实现位置
/** * 一些初始化工作最好在这里实现 */- (void)prepareLayout{ [super prepareLayout]; // 每个cell的尺寸 self.itemSize = CGSizeMake(HMItemWH, HMItemWH); CGFloat inset = (self.collectionView.frame.size.width - HMItemWH) * 0.5; self.sectionInset = UIEdgeInsetsMake(0, inset, 0, inset); // 设置水平滚动 self.scrollDirection = UICollectionViewScrollDirectionHorizontal; self.minimumLineSpacing = HMItemWH * 0.7; // 每一个cell(item)都有自己的UICollectionViewLayoutAttributes // 每一个indexPath都有自己的UICollectionViewLayoutAttributes}
4.重新布局--返回rect范围内的布局属性
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ // 0.计算可见的矩形框 CGRect visiableRect; visiableRect.size = self.collectionView.frame.size; visiableRect.origin = self.collectionView.contentOffset; // 1.取得默认的cell的UICollectionViewLayoutAttributes NSArray *array = [super layoutAttributesForElementsInRect:rect]; // 计算屏幕最中间的x CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5; // 2.遍历所有的布局属性 for (UICollectionViewLayoutAttributes *attrs in array) { // 如果不在屏幕上,直接跳过 if (!CGRectIntersectsRect(visiableRect, attrs.frame)) continue; // 每一个item的中点x CGFloat itemCenterX = attrs.center.x; // 差距越小, 缩放比例越大 // 根据跟屏幕最中间的距离计算缩放比例 CGFloat scale = 1 + HMScaleFactor * (1 - (ABS(itemCenterX - centerX) / HMActiveDistance)); attrs.transform = CGAffineTransformMakeScale(scale, scale); } return array;}
5.自定义布局--返回indexPath这个位置Item的布局属性
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath{ UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; attrs.size = CGSizeMake(50, 50); // 圆的半径 CGFloat circleRadius = 70; CGPoint circleCenter = CGPointMake(self.collectionView.frame.size.width * 0.5, self.collectionView.frame.size.height * 0.5); // 每个item之间的角度 CGFloat angleDelta = M_PI * 2 / [self.collectionView numberOfItemsInSection:indexPath.section]; // 计算当前item的角度 CGFloat angle = indexPath.item * angleDelta; attrs.center = CGPointMake(circleCenter.x + circleRadius * cosf(angle), circleCenter.y - circleRadius * sinf(angle)); attrs.zIndex = indexPath.item; return attrs;}
6.返回所有尺寸
/** * 返回所有的尺寸 */- (CGSize)collectionViewContentSize{ __block NSString *maxColumn = @"0"; [self.maxYDict enumerateKeysAndObjectsUsingBlock:^(NSString *column, NSNumber *maxY, BOOL *stop) { if ([maxY floatValue] > [self.maxYDict[maxColumn] floatValue]) { maxColumn = column; } }]; return CGSizeMake(0, [self.maxYDict[maxColumn] floatValue] + self.sectionInset.bottom);}
别人写的别人写的
0 0
- UICollectionView 小总结 ---UICollectionViewFlowLayout
- UICollectionView详解二:UICollectionViewFlowLayout
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- 【iOS官方文档翻译】UICollectionView与UICollectionViewFlowLayout
- UICollectionView--使用系统UICollectionViewFlowLayout布局类
- UICollectionView: 1>UICollectionViewFlowLayout流式布局
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- 关于iOS UICollectionView的使用UICollectionViewFlowLayout
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
- UICollectionViewFlowLayOut
- UICollectionView总结
- tensorflow安装步骤
- CSDN-markdown编辑器使用说明书备份
- Dalvik VM (DVM) 与Java VM (JVM)之间有哪些区别?
- java行业的开发规范
- Android Things简介
- UICollectionView 小总结 ---UICollectionViewFlowLayout
- 关键字
- 蚂蚁宝卡套餐资费
- findBugs学习小结
- Java泛型
- laravel 打印sql
- Socket学习 - 从这个角度学http协议就很简单了
- 说说遇到的一个问题
- win10开启telnet服务