iOS---UICollectionView詳解和經常使用API翻譯

UICollectionView

  • 1.必需要設置佈局參數
  • 2.註冊cell
用法相似於UITableView 類。自動實現重用,必須註冊初始化。
使用UICollectionView必須實現UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout這三個協議。

Collection View的構成,咱們能看到的有三個部分:

  • Cells
  • Supplementary Views 追加視圖 (相似Header或者Footer)
  • Decoration Views 裝飾視圖 (用做背景展現)

1、UICollectionViewLayout

  • UICollectionView的精髓
  • Layout決定了UICollectionView是如何顯示在界面上的。在展現以前,通常須要生成合適的UICollectionViewLayout子類對象,並將其賦予CollectionView的collectionViewLayout屬性。

1.UICollectionViewFlowLayout

  • 最簡單也是最經常使用的默認layout對象,UICollectionViewFlowLayout。Flow Layout簡單說是一個直線對齊的layout,

經常使用屬性

// 行間距,也能夠經過collectionView: layout:minimumLineSpacingForSectionAtIndex:
@property (nonatomic) CGFloat minimumLineSpacing;

// 設置cell之間的間距
@property (nonatomic) CGFloat minimumInteritemSpacing;

// 定義每個item的大小。經過設定itemSize能夠全局地改變全部cell的尺寸,若是想要對某個cell制定尺寸,
//可使用-collectionView:layout:sizeForItemAtIndexPath:方法。
@property (nonatomic) CGSize itemSize;

@property (nonatomic) CGSize estimatedItemSize

// 滾動方向,默認是水平
// UICollectionViewScrollDirectionVertical
// UICollectionViewScrollDirectionHorizontal
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;

// 根據滾動方向不一樣,header和footer的高和寬中只有一個會起做用。
// 垂直滾動時section間寬度爲該尺寸的高,而水平滾動時爲寬度起做用,
@property (nonatomic) CGSize headerReferenceSize;
@property (nonatomic) CGSize footerReferenceSize;

// 組間距 縮進
@property (nonatomic) UIEdgeInsets sectionInset;

UICollectionViewDelegateFlowLayout代理方法

// 設定指定Cell的尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

// 設定collectionView(指定區)的邊距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;

// 設定指定區內Cell的最小行距,也能夠直接設置UICollectionViewFlowLayout的minimumLineSpacing屬性
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section

// 設定指定區內Cell的最小間距,也能夠直接設置UICollectionViewFlowLayout的minimumInteritemSpacing屬性
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;

2.UICollectionViewLayoutAttributes

  • 一個很是重要的類,

屬性列表

// 邊框
@property (nonatomic) CGRect frame
// 中心點
@property (nonatomic) CGPoint center
// 大小
@property (nonatomic) CGSize size
// 形狀
@property (nonatomic) CATransform3D transform3D
// 透明度
@property (nonatomic) CGFloat alpha
// 層次關係
@property (nonatomic) NSInteger zIndex
// 是否隱藏
@property (nonatomic, getter=isHidden) BOOL hidden

3.自定義的UICollectionViewLayout

  • UICollectionViewLayout的功能爲向UICollectionView提供佈局信息.
  • 繼承UICollectionViewLayout類。

重寫方法

// 返回collectionView的內容的尺寸
-(CGSize)collectionViewContentSize

// 返回rect中的全部的元素的佈局屬性
/*
返回的是包含UICollectionViewLayoutAttributes的NSArray
UICollectionViewLayoutAttributes能夠是cell,追加視圖或裝飾
視圖的信息,經過不一樣的UICollectionViewLayoutAttributes初始
化方法能夠獲得不一樣類型的UICollectionViewLayoutAttributes:
*/
-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

// 返回對應於indexPath的位置的cell的佈局屬性
-(UICollectionViewLayoutAttributes _)layoutAttributesForItemAtIndexPath:(NSIndexPath _)indexPath

//返回對應於indexPath的位置的追加視圖的佈局屬性,若是沒有追加視圖可不重載
-(UICollectionViewLayoutAttributes _)layoutAttributesForSupplementaryViewOfKind:(NSString _)kind atIndexPath:(NSIndexPath *)indexPath

// 返回對應於indexPath的位置的裝飾視圖的佈局屬性,若是沒有裝飾視圖可不重載
-(UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind:(NSString_)decorationViewKind atIndexPath:(NSIndexPath _)indexPath

// 當邊界發生改變時,是否應該刷新佈局。若是YES則在邊界變化(通常是scroll到其餘地方)時,將從新計算須要的佈局信息。
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
  • 另外須要瞭解的是,在初始化一個UICollectionViewLayout實例後,會有一系列準備方法被自動調用,以保證layout實例的正確。佈局

  • 首先,-(void)prepareLayout將被調用,
    • 默認下該方法什麼沒作,可是在本身的子類實現中
    • ,通常在該方法中設定一些必要的layout的結構和初始須要的參數等。
  • 以後,-(CGSize) collectionViewContentSize將被調用,
    • 以肯定collection應該佔據的尺寸。注意這裏的尺寸不是指可視部分的尺寸,而應該是全部內容所佔的尺寸。
    • collectionView的本質是一個scrollView,所以須要這個尺寸來配置滾動行爲。

2、UICollectionView

1.UICollectionViewDataSource

①section的數量 -numberOfSectionsInCollection:
②某個section裏有多少個item -collectionView:numberOfItemsInSection:
③對於某個位置應該顯示什麼樣的cell -collectionView:cellForItemAtIndexPath:

2.UICollectionViewDelegate

// 當指定indexPath處的item被選擇時觸發
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

//返回這個UICollectionView是否能夠被選擇
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath;

// 下面是三個和高亮有關的方法:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath


/*
事件的處理順序以下:

1.手指按下
2.shouldHighlightItemAtIndexPath (若是返回YES則向下執行,不然執行到這裏爲止)
3.didHighlightItemAtIndexPath (高亮)
4.手指鬆開
5.didUnhighlightItemAtIndexPath (取消高亮)
6.shouldSelectItemAtIndexPath (若是返回YES則向下執行,不然執行到這裏爲止)
7.didSelectItemAtIndexPath (執行選擇事件)
*/
相關文章
相關標籤/搜索