這裡是通過純代碼的方式進行添加操作
#import "ViewController.h" #import "AppCell.h" #import "AppFlowLayout.h" @interface ViewController ()@end //重用標識符 static NSString *identifier = @"cell"; @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //實例化一個自定義Flowlayout AppFlowLayout *flowlayout = [[AppFlowLayout alloc]init]; //實例化創建一個CollectionView UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0 , 200, 375, 300) collectionViewLayout:flowlayout]; //設置數據源代理 collectionView.dataSource = self; //注冊Cell [collectionView registerClass:[AppCell class] forCellWithReuseIdentifier:identifier]; //添加到控制器上 [self.view addSubview:collectionView]; } //組 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ return 1; } //行 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ return 10; } //內容 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ AppCell *collection =[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; return collection; } @end
AppCell.h
#import@interface AppCell : UICollectionViewCell @end
AppCell.m
#import "AppCell.h" @implementation AppCell -(instancetype)initWithFrame:(CGRect)frame{ if (self =[super initWithFrame:frame]) { //初始化創建UIImageView UIImageView *imageView =[[UIImageView alloc]initWithFrame:self.contentView.bounds]; //設置默認圖片 imageView.image = [UIImage imageNamed:@"aqs"]; [self.contentView addSubview:imageView]; } return self; } @end
AppFlowLayout.h
#import@interface AppFlowLayout : UICollectionViewFlowLayout @end
AppFlowLayout.m
#import "AppFlowLayout.h" @implementation PhotoFlowLayout //在這個方法中,UICollectionView還沒有實例化,所以取不到其對應的frame -(instancetype)init{ if (self == [super init]) { } return self; } //當布局刷新的時候會自動調用這個方法 -(void)prepareLayout{ [super prepareLayout]; //修改滾動方向 為水平方向來滾動 self.scrollDirection = UICollectionViewScrollDirectionHorizontal; //獲取對應UICollectionView的Size CGSize collectionSize = self.collectionView.frame.size; //定義顯示ITEM的 寬 高 CGFloat itemWidth = collectionSize.height*0.6; CGFloat itemHeight = collectionSize.height*0.8; //修改ITEM大小 self.itemSize = CGSizeMake(itemWidth, itemHeight); //設置頭部和尾部的初始間距 CGFloat topMargin = collectionSize.width/2-itemWidth/2; self.sectionInset = UIEdgeInsetsMake(0, topMargin, 0, topMargin); } //返回所的有的Item對應的屬性設置 -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect{ //取出所有的Item對應的屬性 NSArray *superAttributesArray = [super layoutAttributesForElementsInRect:rect]; //計算中心點 CGFloat screenCenter = self.collectionView.contentOffset.x+self.collectionView.frame.size.width/2; //循環設置Item 的屬性 for (UICollectionViewLayoutAttributes *attributes in superAttributesArray) { //計算 差值 CGFloat deltaMargin = ABS(screenCenter - attributes.center.x); //計算放大比例 CGFloat scale = 1 - deltaMargin/(self.collectionView.frame.size.width/2+attributes.size.width); //設置 attributes.transform = CGAffineTransformMakeScale(scale, scale); } return superAttributesArray; } //當手指離開屏幕時會調用此方法 -(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ //取出屏幕的中心點 CGFloat screenCenter = proposedContentOffset.x +self.collectionView.frame.size.width/2; //取出可見范圍內的Cell CGRect visibleRect = CGRectZero; visibleRect.size = self.collectionView.frame.size; visibleRect.origin = proposedContentOffset; NSArray *visibleArray = [super layoutAttributesForElementsInRect:visibleRect]; CGFloat minMargin = MAXFLOAT; for (UICollectionViewLayoutAttributes *attributes in visibleArray) { CGFloat deltaMargin = attributes.center.x -screenCenter; if (ABS(minMargin)>ABS(deltaMargin)) { minMargin = deltaMargin; } } return CGPointMake(proposedContentOffset.x+ minMargin, proposedContentOffset.y); } //當屏幕的可見范圍發生變化 的時候 //重新刷新視圖 -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ return YES; } @end