YongSir

专业程序员伪装者

collectionView - Pinterest布局实现

UICollectionView过于强大以至于到现在都没有对它深入了解,其良好的custemed特性,帮助我们可以完成各种各样的炫酷效果,比较典型的如:Pinterest的流水布局,老版paper的翻页折叠,以及系统任务切换时的滑页式效果等

当然所有的custom都是需要借助UICollectionViewLayout,在实际使用中,除非完全自定的效果之外,绝大多是时候我们使用以定义一部分的UICollectionViewFlowLayout即可,那就循序渐进,从它入手。

当使用collectionView时,初始化的时候常常个人来说会有一些‘烦恼’,特别是在swift中把collectionView当中单独的属性初始化的时候,因为需要layout,而很多时候layout是需要单独提出来设置的,所以总会带来一些烦恼,代码的区分并不明确,后来才发现的确是自己的问题,因为UICollectionView本身的属性是有可set和get的collectionViewLayout的饮用的,所以基本上是自己的问题,这里顺便记录

重点方法:

1
2
3
4
5
6
7
8
// UICollectionView calls these four methods to determine the layout information.
// Implement -layoutAttributesForElementsInRect: to return layout attributes for for supplementary or decoration views, or to perform layout in an as-needed-on-screen fashion.
// Additionally, all layout subclasses should implement -layoutAttributesForItemAtIndexPath: to return layout attributes instances on demand for specific index paths.
// If the layout supports any supplementary or decoration view types, it should also implement the respective atIndexPath: methods for those types.
public func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? // return an array layout attributes instances for all the views in the given rect
public func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes?
public func layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes?
public func layoutAttributesForDecorationViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes?

注释部分已经说了:上边的4个方法决定了最终的layout信息