FlowLayout布局_UICollectionViewFlowLayout

有关UICollectionViewFlowLout的最经典例子,莫过于瀑布流的布局:

对于UICollectionView的处理都比较简单,众所周知的各种炫酷的效果,对于CollectionView功不可没,下面就以自己所理解的来浅聊一下它;

重点分为2种情况,根据本人做过的效果:

第一种情况:类似瀑布流的布局,核心就在下面的2个系统方法中:

-(void)prepareLayout{

}

解释下这个方法:这个方法只要FlowLayout的布局发生变化,就会调用,常用来设置如:

大部分cell的frame属性等。

注意:其中的CollectionView的contentSize是根据itemSize动态计算出来的,不能写死


// 当出现当前的布局对象时,返回当前的以及之前的所有属性数组,(注意:一旦计算完毕,所有的属性会被缓存,不会再被计算)

-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect {

return self.layoutAttributesArray;

}

以上2个方法用来布局瀑布流的情况所用:code详见地址:https://github.com/zxwIsCode/WaterFull-


第二种情况为:如苹果iOS9之后的手机相册的效果:

处理它的一些方法为:常用为以下3个:

1.是否支持手动改变布局

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)oldBounds

{

return YES;

}

2.同上一种情况的设计

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{

}

3.处理item之间滑动的动画(控制Frame的变化)

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity {

}

code后续会给出地址:

二者的区别点在于:

当界面的设计如瀑布流特点:所有的frame都不是太固定,需要当前的frame依靠上一个item的frame设计时,采用第一种情况,

当界面中如苹果相册的只有最中间的frame需要特殊处理,如尺寸放大缩小,位置发生变化等,需要采用第二种情况设计

综上为对UICollectionViewFlowLayout的理解与使用

附上大牛参考资料:

http://www.jianshu.com/p/40868928a1cf

http://www.jianshu.com/p/83f2d6ac7e68

你可能感兴趣的:(FlowLayout布局_UICollectionViewFlowLayout)