UICollectionView 高级进阶篇
来源:互联网 发布:网络征婚投资 编辑:程序博客网 时间:2024/05/24 03:23
在聊完几次理论后,今天给大家带来一篇关于UI的文章,看标题大家已经知道了,没错,就是大家所熟悉的UICollectionView。说起github上赫赫有名的卡片展示视图iCarousel,大多数iOS开发人员或多或少都有听过或使用过,其丰富的展示样式经常出现在某些APP的一级路径,其实,苹果公司针对卡片样式祭出了自己的解决方案——UICollectionView
废话少说,先上干货HJCarouselDemo
看完GIF展示的效果,各位是否已经蠢蠢欲动,这不就是iCarousel视图嘛,没错!但是今天我们采用UICollectionView实现这些效果。平常开发中,最熟悉的莫过于UICollectionViewFlowLayout,其实UICollectionViewFlowLayout相当于苹果提前定义的一个特殊UICollectionViewLayout。
先看看UICollectionViewLayout类的官方文档(好吧,原谅我半天打不开苹果网址,最近敏感期,各种和谐),还是直接看代码吧,总之,自定义UICollectionViewLayout,必须实现以下几个函数
collectionViewContentSize
layoutAttributesForElementsInRect:
layoutAttributesForItemAtIndexPath:
layoutAttributesForSupplementaryViewOfKind:atIndexPath: (if your layout supports supplementary views)
layoutAttributesForDecorationViewOfKind:atIndexPath: (if your layout supports decoration views)
shouldInvalidateLayoutForBoundsChange:
看函数名就可以知道各个函数实现的功能:第一个定位View的contentSize,第二个函数定义屏幕展示的范围和数量,第三个定义cell的布局,第四个和第五个是可选项,定义SupplementaryView以及DecorationView的布局,最后一个定义是否重新布局
UICollectionViewLayout的精髓在于你可以定义每个cell的UICollectionViewLayoutAttributes属性,包括
@property (nonatomic) CGRect frame;
@property (nonatomic) CGPoint center;
@property (nonatomic) CGSize size;
@property (nonatomic) CATransform3D transform3D;
@property (nonatomic) CGRect bounds NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGAffineTransform transform NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGFloat alpha;
@property (nonatomic) NSInteger zIndex;
// default is 0
通过定义transform3D属性可以实现视图的旋转、放大以及透视等效果,具体实现参考HJCarouselDemo
在这里格外需要强调的一点,那就是page属性,当滑动停止时,希望UICollectionView滑动到卡片的中心,而不是任意位置
UICollectionViewLayout定义函数
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
其中 ,proposedContentOffset为系统期望滑动到的位置,velocity为加速度,你可以通过这两个参数以及当前所在的位置计算出你希望它滑动到的位置,具体算法根据需求的不同来实现
有用过我们天天动听iOS客户端或者QQ音乐的朋友,可能都非常熟悉这个动画效果,天天动听的推荐页面以及QQ音乐的MV界面,是不是就这样,嘿嘿!重要的事说三遍,赶快下载天天动听客户端,跟我们一起摇摆起来~~~
番外篇
说完View,接下来聊聊Controller,谈什么了?谈谈它们之间的关系,最近业界对设计模式的话题讨论比较热烈,MVC、MVVM、MVP等等,不知道各位在实际开发中一般使用什么样的设计模式,有什么好的想法都可以在下面留言,下期再见!
- UICollectionView高级进阶篇
- UICollectionView 高级进阶篇
- UICollectionView高级进阶篇
- JS进阶高级篇
- UICollectionView进阶(一)
- UICollectionView进阶练习
- UICollectionView 高级用法
- UICollectionView高级实践
- 高级进阶
- Android 高级进阶(源码剖析篇)
- UICollectionView高级使用示例之CircleLayout
- UICollectionView高级使用示例之CircleLayout
- truts高级进阶
- Freemarker 高级进阶
- ab高级进阶
- LIBSVM高级进阶
- hive初级、进阶、高级
- ios高级进阶技能
- mysql doc 网址
- Codeforces 652D(一维树状数组)
- unity 彩虹灯效果
- 操作系统--内存学习笔记(2)进程内存管理--虚拟内存
- BZOJ3675 Apio2014 序列分割
- UICollectionView 高级进阶篇
- Xcode8更新后的一些问题解决
- 仿知乎日报第九篇:为首页以及其他12个页面从网上加载数据分析
- 在webstorm11中使用nodejs库的智能提示功能
- 也谈谈机器学习中的Evaluation Metrics
- 关于digital ocean 的使用(转载)
- Android组件复习之基本组件06—autocompletetextview自动完成文本框
- Struts2笔记
- android利用shap画小圆圈(空心圆、实心圆)