iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2710字,纯文字阅读大概需要4分钟。
内容图文
之前看到过的一篇文章
对collectionView的使用总结的非常好:“iOS6新特征:UICollectionView介绍”
流水布局在现在的应用中很常见了,简单的研究了下,实现下面的功能
那我这里就简单介绍下 UICollectionViewFlowLayout 常用的几个方法,通过这几个方法就能办到上面的效果了
1、布局
/* * * 用来做布局的初始化操作(不建议在init方法中进行布局的初始化操作) */ - (void)prepareLayout { [super prepareLayout]; }
在这里设置为水平滚动
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
2、排布rect范围内的控件
/* * 数组中保存的是 UICollectionViewLayoutAttributes *attrs; 1.一个cell对应一个UICollectionViewLayoutAttributes对象 2.UICollectionViewLayoutAttributes对象决定了cell的frame */ /* * * 这个方法的返回值是一个数组(数组里面存放着rect范围内所有元素的布局属性) * 这个方法的返回值决定了rect范围内所有元素的排布(frame) */ - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { // 获得super已经计算好的布局属性 NSArray *array = [super layoutAttributesForElementsInRect:rect]; return array; }
在这个方法中可以先拿到系统计算好的布局属性,然后遍历,对cell进行微调
// 获得super已经计算好的布局属性 NSArray *array = [super layoutAttributesForElementsInRect:rect]; // 计算collectionView最中心点的x值 CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5; // 在原有布局属性的基础上,进行微调for (UICollectionViewLayoutAttributes *attrs in array) { // cell的中心点x 和 collectionView最中心点的x值 的间距 CGFloat delta = ABS(attrs.center.x - centerX); // 根据间距值 计算 cell的缩放比例 CGFloat scale = 1 - delta / self.collectionView.frame.size.width; // 设置缩放比例 attrs.transform = CGAffineTransformMakeScale(scale, scale); }
3、重新刷新布局
/* * * 当collectionView的显示范围发生改变的时候,是否需要重新刷新布局 * 一旦重新刷新布局,就会重新调用下面的方法:(也就上面那两) 1.prepareLayout 2.layoutAttributesForElementsInRect:方法 */ - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { return YES; }
因为在滚动之后都需要实时对attrs.transform进行改变,返回yes代表rect发生改变时调用1、2方法重新布局 达到滚动到中间时放大的效果
4、collectionView停止滚动时的偏移量
/* * * 这个方法的返回值,就决定了collectionView停止滚动时的偏移量 * 这个方法在滚动松手的那一刻调用 */ - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity { // proposedContentOffset 预计的位置(滚动结束时)return proposedContentOffset; }
在这个方法中判断滚动真正停止时哪个cell里中心点最近,计算出最近的cell里中心点的间距(有正负之分),加上系统预计的ContentOffset就能修改实际滚到的位置。
核心代码:
// 计算出最终显示的矩形框 CGRect rect; rect.origin.y = 0; rect.origin.x = proposedContentOffset.x; rect.size = self.collectionView.frame.size; // 获得super已经计算好的布局属性 NSArray *array = [super layoutAttributesForElementsInRect:rect]; // 计算collectionView最中心点的x值 CGFloat centerX = proposedContentOffset.x + self.collectionView.frame.size.width * 0.5; // 存放最小的间距值 CGFloat minDelta = MAXFLOAT; for (UICollectionViewLayoutAttributes *attrs in array) { if (ABS(minDelta) > ABS(attrs.center.x - centerX)) { minDelta = attrs.center.x - centerX; } } // 修改原有的偏移量 proposedContentOffset.x += minDelta; return proposedContentOffset;
原文:http://www.cnblogs.com/chglog/p/4886538.html
内容总结
以上是互联网集市为您收集整理的iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用全部内容,希望文章能够帮你解决iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。