UI10-UICollectionView

来源:互联网 发布:拦截视频广告软件 编辑:程序博客网 时间:2024/05/05 04:39

ViewController.m

#import "ViewController.h"#import "UIColor+RandomColor.h"#import "CustomCollectionViewCell.h"#import "PhotoViewController.h"@interface ViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>//数据源@property (nonatomic, strong)NSMutableArray *dataSource;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //实例化数据源    _dataSource = [NSMutableArray array];    //循环添加RGB颜色到数据源    for (NSInteger index = 0; index < 50; index ++) {        [_dataSource addObject:[UIColor specialRandomColor]];    }        /**< CollectionView */    //1.CollectionView布局(流式布局)    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];    //滚动方向    layout.scrollDirection = UICollectionViewScrollDirectionVertical;    //设置 item 的尺寸    layout.itemSize = CGSizeMake(100, 100);    //设置 item 之间的最小间距    layout.minimumInteritemSpacing = 4;    //设置 item 之间的最小行距    layout.minimumLineSpacing = 10;    //header(宽和CollectionView是一样的,在此设置无意义)    layout.headerReferenceSize = CGSizeMake(320, 60);    //footer(宽和CollectionView是一样的,在此设置无意义)    layout.footerReferenceSize = CGSizeMake(0, 60);        //2.利用布局对象实例化 CollectionView    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];    //背景颜色    collectionView.backgroundColor = [UIColor whiteColor];    //内偏移量(上,左,下,右)    collectionView.contentInset = UIEdgeInsetsMake(0, 20, 0, 20);    //代理(处理响应)    collectionView.delegate = self;    //代理(展示数据)    collectionView.dataSource = self;    //注册cell    [collectionView registerClass:[CustomCollectionViewCell class] forCellWithReuseIdentifier:@"cell"];    //注册header    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];    //注册 footer    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer"];    //添加到视图    [self.view addSubview:collectionView];        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"照片" style:UIBarButtonItemStylePlain target:self action:@selector(nextAction)];}- (void)nextAction{    PhotoViewController *phVC = [[PhotoViewController alloc]init];    [self.navigationController pushViewController:phVC animated:YES];}#pragma mark - UICollectionViewDelegate,UICollectionViewDataSource//指定有几个 cell- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{    return _dataSource.count;}//配置返回 cell- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{    //初始化    CustomCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];    //赋值    cell.backgroundColor = _dataSource[indexPath.row];        return cell;}//通过设置SupplementaryViewOfKind 来设置头部或者底部的view,其中 ReuseIdentifier 的值必须和 注册是填写的一致- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{    if (kind == UICollectionElementKindSectionHeader) {        //header        //取到header        UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];        //设置背景颜色        header.backgroundColor = [UIColor cyanColor];        return header;            }else{        //footer        UICollectionReusableView *footer = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer" forIndexPath:indexPath];        //设置背景颜色        footer.backgroundColor = [UIColor cyanColor];        return footer;    }    }//选择 cell- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{    NSLog(@"%ld",indexPath.row);       /**< 删除 *///    //删除数据源//    [_dataSource removeObjectAtIndex:indexPath.row];//    //删除视图//    [collectionView deleteItemsAtIndexPaths:@[indexPath]];        /**< 插入 */    //插入数据源//    [_dataSource insertObject:[UIColor specialRandomColor] atIndex:indexPath.row];//    //插入视图//    [collectionView insertItemsAtIndexPaths:@[indexPath]];        /**< 移动 */    //移动数据源    [_dataSource exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];    //移动视图    [collectionView moveItemAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];    }@end
PhotoViewController.m

#import "PhotoViewController.h"@interface PhotoViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>//图片视图@property (nonatomic, strong) UIImageView *imageView;@end@implementation PhotoViewController- (void)viewDidLoad {    [super viewDidLoad];    //设置背景颜色    self.view.backgroundColor = [UIColor whiteColor];        /**< 图片 */    //初始化    _imageView = [[UIImageView alloc] init];    //大小    _imageView.bounds = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds)*0.8, CGRectGetWidth(self.view.bounds)*0.8);    //中心店位置    _imageView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds) - 100);    //背景颜色    _imageView.backgroundColor = [UIColor lightGrayColor];    //添加到视图    [self.view addSubview:_imageView];        /**< 选择按钮 */    //初始化    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];    //位置和大小    button.frame = CGRectMake(150, 500, 80, 30);    //按钮文字    [button setTitle:@"选择" forState:UIControlStateNormal];    //添加动作    [button addTarget:self action:@selector(buttonTaped:) forControlEvents:UIControlEventTouchUpInside];    //添加到视图    [self.view addSubview:button];}//button实现方法- (void)buttonTaped:(UIButton *)sender {        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"选择照片" message:@"请你选择头像" preferredStyle:UIAlertControllerStyleActionSheet];    UIAlertAction *photoAction = [UIAlertAction actionWithTitle:@"选择照片" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {        [self choosePhoto];    }];        UIAlertAction *takeAction = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {        [self takePhoto];    }];        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];        [alertController addAction:photoAction];    [alertController addAction:takeAction];    [alertController addAction:cancelAction];        [self presentViewController:alertController animated:YES completion:nil];    }//相册- (void)choosePhoto {    UIImagePickerController *picker = [[UIImagePickerController alloc]init];    //资源类型    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;    //代理    picker.delegate = self;    //允许编辑    picker.allowsEditing = YES;        //推送界面    [self presentViewController:picker animated:YES completion:nil];}//拍照(不能拍照,因为模拟器不支持拍照)- (void)takePhoto {    if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){        NSLog(@"你的手机不支持拍照,请更换设备");        return;    }    UIImagePickerController *picker = [[UIImagePickerController alloc]init];    //资源类型    picker.sourceType = UIImagePickerControllerSourceTypeCamera;    //代理    picker.delegate = self;    //允许编辑    picker.allowsEditing = YES;        //推送界面    [self presentViewController:picker animated:YES completion:nil];}#pragma mark - UIImagePickerControllerDelegate- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{    NSLog(@"%@",info);    //给image赋值    _imageView.image = info[UIImagePickerControllerEditedImage];    //返回    [picker dismissViewControllerAnimated:YES completion:nil];}@end
CustomCollectionViewCell.m

#import "CustomCollectionViewCell.h"@implementation CustomCollectionViewCell- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 40, 20)];        label.backgroundColor = [UIColor whiteColor];        [self addSubview:label];    }    return self;}@end




0 0