UICollectionView基础教学

相信了解UICollectionView的也一定听过瀑布流吧,开始之前先提供两个瀑布流,有时间的可以深入研究研究

https://github.com/dingpuyu/WaterFall

https://github.com/zhangsuya/SYStickHeaderWaterFall

直接上代码吧,里面有注释,工程效果图:

文件目录:

思路步骤:

1.创建RootViewController,将RootViewController作为Window的根视图:代码的实现在AppDelegate.m中

self.window  = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:[[RootViewController alloc] init]];
    self.window.rootViewController = rootNav;

2.创建视图RootView替换RootViewController自带的view:在RootViewController.m中实现

- (void)loadView {
    self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = self.rootView;
}

3.创建自定义cell。

各文件的具体代码如下:

RootViewController.h

#import "RootViewController.h"
#import "RootView.h"
#import "RootCell.h"
#import "HeaderReusableView.h"
#import "SecondViewController.h"

@interface RootViewController ()<UICollectionViewDataSource, UICollectionViewDelegate>//要遵循的代理

@property (nonatomic, strong) RootView *rootView;

@end

@implementation RootViewController
//定义全局的重用标识符
static NSString *const identifier_cell = @"identifier_cell";

- (void)loadView {
    
    self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = self.rootView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //设置代理
    self.rootView.collectionView.delegate = self;
    self.rootView.collectionView.dataSource = self;
    //第一步:注册cell
    [self.rootView.collectionView registerClass:[RootCell class] forCellWithReuseIdentifier:identifier_cell];
    
    //注册头视图
//    [self.rootView.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView"];
    
    //注册尾视图
    [self.rootView.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerView"];
    
    //注册自定义头视图
    [self.rootView.collectionView registerClass:[HeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView"];
    
}

#pragma mark UICollectionViewDataSource Method------------
//设置多少个分区
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 4;
}

//设置每个分区里面有几个item(必须实现)
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 5;
    
}

//返回每个item的cell对象(必须实现)

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    //第二步:重用cell
    RootCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier_cell forIndexPath:indexPath];
    cell.backgroundColor = [UIColor orangeColor];
    
    switch (indexPath.section) {
        case 0:{
            cell.photoImage.image = [UIImage imageNamed:@"22"];
            return cell;
        }
        case 1:{
            cell.photoImage.image = [UIImage imageNamed:@"5"];
            return cell;
        }
            
    }
    cell.photoImage.image = [UIImage imageNamed:@"33"];
    return cell;
    
}

//返回头视图和尾视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    //判断是头视图还是尾视图
    //头视图
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
       HeaderReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];
        //headerView.backgroundColor = [UIColor redColor];
        headerView.headerLabel.text = @"海贼王";
        return headerView;
    }
    //尾视图
    if ([kind isEqualToString:UICollectionElementKindSectionFooter]) {
        UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerView" forIndexPath:indexPath];
        footerView.backgroundColor = [UIColor whiteColor];
        return footerView;
    }
    return nil;
}

//点击Item实现跳转
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:secondVC animated:YES];
}

@end

RootView.h

@interface RootView : UIView
//声明集合视图属性
@property (nonatomic, strong) UICollectionView *collectionView;
//专门给cllectionView布局的(必须有)
@property (nonatomic, strong) UICollectionViewFlowLayout *myFlowLayout;

@end

RootView.m

#import "RootView.h"

@implementation RootView

-(instancetype)initWithFrame:(CGRect)frame {
    
    self = [super initWithFrame:frame];
    if (self) {
        //初始化布局
        [self initLayout];
    }
    
    return self;
}
//初始化布局
- (void)initLayout {
    //1.定义collectionView的样式
    self.myFlowLayout = [[UICollectionViewFlowLayout alloc] init];
    //设置属性
    //给定item的大小
    self.myFlowLayout.itemSize = CGSizeMake((self.bounds.size.width - 40.1) / 3, (self.bounds.size.width - 40.1) / 3);
    //垂直滚动的间隙:任意两个item的最小间隙
    self.myFlowLayout.minimumInteritemSpacing = 10;
    //水平滚动的间隙:任意两个item的最小间隙
    self.myFlowLayout.minimumLineSpacing = 10;
    //设置滚动方向
    self.myFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;//垂直方向
    //设置视图的内边距(上左下右)
    self.myFlowLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
    //指定头视图的尺寸
    self.myFlowLayout.headerReferenceSize = CGSizeMake(100, 100);//默认是屏幕的宽度,高度自己设定
    //指定尾视图的尺寸
    self.myFlowLayout.footerReferenceSize = CGSizeMake(100, 10);//默认是屏幕的宽度,高度自己设定

//2.布局collectionView
    //创建对象并指定样式
    self.collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:self.myFlowLayout];
    self.collectionView.backgroundColor = [UIColor greenColor];
    //添加到父视图
    [self addSubview:self.collectionView];
}

@end
RootCell.h

#import <UIKit/UIKit.h>

@interface RootCell : UICollectionViewCell
//声明imageView的子控件
@property (nonatomic, strong) UIImageView *photoImage;

@end

RootCell.m

#import "RootCell.h"

@implementation RootCell

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self initLayout];
    }
    return self;
}
//布局子视图
- (void)initLayout {
    self.photoImage = [[UIImageView alloc] initWithFrame:self.bounds];
    [self.contentView addSubview:self.photoImage];
    
}

@end

上面只是UICollectionView的一点基础操作,内容比较简单,但都是一些最基本的属性、方法的应用,至于复杂的功能实现,网络上有好多,根据自己的需求下载demo进行参考:最后再提供一个酷炫demo的链接:https://github.com/panghaijiao/HJCarouselDemo

时间: 2024-10-29 19:11:08

UICollectionView基础教学的相关文章

【Cocos2d-Js基础教学 入门目录】

从接触Cocos2dx-Js以来,它的绽放的绚丽让我无法不对它喜欢.我觉得Js在不断带给我们惊喜:在开发过程中,会大大提升我们对原型开发的利用率,使用Js语言做游戏开发,使游戏可测试性更加强大,但很多人觉得Cocos2d-Js引擎是一门很沉重的语言,里面的API非常深,这其实是错误的理解,Js对自身语言的扩展,对其他语言的通讯支持,都是非常强大的.目前官方对API的整合分为了Cocos2dx-Js和Cocos2dx-Js-Lite版本: Cocos2dx-Js官方的介绍是这样的: Cocos2d

es6属性基础教学,30分钟包会

ES6基础智商划重点在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译. ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得高兴的是,如果你熟悉ES5,学习ES6并不需要花费太多的时间就可以掌握,因为常用的基础语法并不多,花少量的时间,就可以开始我们的ES6之旅了. 这篇文章不会详细的告诉你ES6的每一个细节知识,只会根据我自己的开发经验,将我在实际开发中常常用到的知识点分享给大家,给大家学习ES6一个方向的指引.这是因

UICollectionView基础

前言 这个控件,看起来与UITableView有点像,而且基本的用法也很相像哦!!! 我们来看看API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #pragma mark - UICollectionViewDataSource // 指定Section个数 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { ret

C#基础教学---献给初入C#的自己和同道中人二

以下内容均为基础薄弱或没有基础的同学而写 如有错误,各位高手还请留言指正! 注:小弟处女作,各位看官还请捧个人场. 二 语法 在开篇里,引用类型和值类型大家或许还有疑问.这一篇里我将用几个小例子+图解来进一步让大家看到他们的区别.然后会在这个过程里,向大家介绍C#的基本语法.语法涉及有:访问修饰符,语句,语句块,语句的构成要素和三种注释. 有很多学习C#的初学者,并没有任何语法基础.我会用公式+代码来讲解下C#里最基础的语法. 在这里,先说设想下这样一个场景. 今天奥斯卡电话通知我,内容是我获得

UICollectionView基础用法

#import "ViewController.h" #define kScreenSize [UIScreen mainScreen].bounds.size //遵守协议 @interface ViewController () <UICollectionViewDataSource,UICollectionViewDelegate> {     UICollectionView *_collectionView;      } @property (nonatomic

iOS UICollectionView基础

转载自:http://www.cnblogs.com/wayne23/p/4013522.html 初始化部分: UICollectionViewFlowLayout *flowLayout= [[UICollectionViewFlowLayout alloc]init]; self.myCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(20, 20, 250, 350) collectionViewLayo

【RPA基础教学】UiBot逻辑语句与循环语句

新手教学丨UiBot逻辑语句与循环语句 逻辑语句[条件分支语句]UIBot中使用的条件判断语句就是If语句,主要用于对某一个或者多个条件进行判断,从而执行不同流程.方式一:如果...则...否则If 条件条件成立执行Else条件不成立执行End If 方式二:如果 条件一 否则如果 条件二 否则If 条件一条件一成立执行ElseIf 条件二条件二成立执行Else上述条件均不成立End If [选择分支语句]根据一定的条件,选择多个分支中的一个,与VBScript中的Select Case语句类似

【软帝学院】一套好的java基础教学视频需要哪些有哪些内容

如今网上有很多java基础视频,这对于新人学java是很有帮助的,但是视频太多也对小白造成了困扰,不知道自己看的这套视频好吗,内容是否合格,适不适合新手看,我接下来便说一下一套合格的java基础视频应该有哪些内容. 一:Java编程基础 Java基础语法 职业导向训练概述.数据类型和运算符.时间管理.流程控制.数组 掌握Java语言的基础 Java面向对象 类和对象.封装.继承.多态.阶段练习-汽车租赁.抽象类和接口.阶段练习-图书销售管理.异常.职场写作力 掌握Java面向对象的思想及其特征

Reac.jst基础教学

一.HTML 模板 使用 React 的网页源码,结构大致如下. <!DOCTYPE html> <html> <head> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.