文档章节

JFImagePickerController、多选图片

iOS赵师顺
 iOS赵师顺
发布于 2016/06/23 20:50
字数 370
阅读 10
收藏 0
点赞 0
评论 0

1、导入框架 遵守协议,初始化数组,UICollectionView;

#import "ViewController.h"

#import "JFImagePickerController.h"

 

@interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,JFImagePickerDelegate>

 

@property   (nonatomic,strong)NSMutableArray *photosArray;

@property   (nonatomic,strong)UICollectionView *photosList;

@end

 

- (void)viewDidLoad {

    [super viewDidLoad];

    self.title = @"多选图片";

    

    self.extendedLayoutIncludesOpaqueBars = YES;

    self.automaticallyAdjustsScrollViewInsets = NO;

    self.edgesForExtendedLayout = UIRectEdgeAll;

    

    _photosArray = [[NSMutableArray alloc]init];

    [self createAddPhotosButton];

    [self createCollectionView];

}

- (void)createAddPhotosButton{

    UIBarButtonItem *addPhotos = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButton:)];

    self.navigationItem.rightBarButtonItem = addPhotos;

}

// 点击添加按钮,进入JFImagePickerController,选图片

- (void)addButton:(UIBarButtonItem *)sender{

    JFImagePickerController *picker = [[JFImagePickerController alloc] initWithRootViewController:nil];

    picker.pickerDelegate = self;

    [self presentViewController:picker animated:YES completion:nil];

}

 

- (void)createCollectionView{

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];

    flowLayout.minimumInteritemSpacing = 0;

    flowLayout.minimumLineSpacing = 3;

    NSInteger size = [UIScreen mainScreen].bounds.size.width/4-1;

    if (size%2!=0) {

        size-=1;

    }

    flowLayout.itemSize = CGSizeMake(size, size);

    flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);

    

    _photosList = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:flowLayout];

    _photosList.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);

    _photosList.scrollIndicatorInsets = _photosList.contentInset;

    _photosList.delegate = self;

    _photosList.dataSource = self;

    _photosList.backgroundColor = [UIColor whiteColor];

    _photosList.alwaysBounceVertical = YES;

    [self.view addSubview:_photosList];

    [_photosList registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"imagePickerCell"];

}

 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{

    return 1;

}

 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return _photosArray.count;

}

 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"imagePickerCell" forIndexPath:indexPath];

    ALAsset *asset = _photosArray[indexPath.row];

    UIImageView *imgView = (UIImageView *)[cell.contentView viewWithTag:1];

    if (!imgView) {

        imgView = [[UIImageView alloc] initWithFrame:cell.bounds];

        imgView.contentMode = UIViewContentModeScaleAspectFill;

        imgView.clipsToBounds = YES;

        imgView.tag = 1;

        [cell addSubview:imgView];

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(preview:)];

        [cell addGestureRecognizer:tap];

    }

    cell.tag = indexPath.item;

    [[JFImageManager sharedManager] thumbWithAsset:asset resultHandler:^(UIImage *result) {

        if (cell.tag==indexPath.item) {

            imgView.image = result;

        }

    }];

    return cell;

}

 

- (void)preview:(UITapGestureRecognizer *)tap{

    UIView *temp = tap.view;

    JFImagePickerController *picker = [[JFImagePickerController alloc] initWithPreviewIndex:temp.tag];

    picker.pickerDelegate = self;

    [self presentViewController:picker animated:YES completion:nil];

}

 

 

#pragma mark - delegate 

// 选择结束后

- (void)imagePickerDidFinished:(JFImagePickerController *)picker{

    [_photosArray removeAllObjects];

    [_photosArray addObjectsFromArray:picker.assets];

    [_photosList reloadData];

    [self imagePickerDidCancel:picker];}

// 取消选择

- (void)imagePickerDidCancel:(JFImagePickerController *)picker{

    [picker dismissViewControllerAnimated:YES completion:nil];

}

© 著作权归作者所有

共有 人打赏支持
iOS赵师顺
粉丝 3
博文 73
码字总数 35628
作品 0
昌平
程序员
手机网页上做多图上传,html5原生上传,不能多选图片

用php做了个手机网站,需要实现多图上传和上传进度条功能,用html5原生方法在PC测试时多选图片多图上传都OK,但是线上,UC浏览器不能多选图片,华为自带浏览器可以实现多选图片上传,IOS暂时...

logoj ⋅ 2016/09/08 ⋅ 0

Android实用视图动画及工具系列之九:漂亮的图片选择器,高性能防崩溃图片选择工具

实现效果 -------------------------------------------------------------------------------------------------------------------- 请在Github下查阅用法(最新更新和用法都在github上第一......

jaikydota163 ⋅ 2016/08/02 ⋅ 0

Android相册自定义--GalleryFinal

GalleryFinal简介 Android相册自定义,包括拍照、图片选择(单选/多选)和裁剪。 为什么要使用GalleryFinal? 拍照/选择图片倒立问题 市场上各种相机和图片浏览器泛滥和各种异常问题 各种手机...

彭建波 ⋅ 2015/10/16 ⋅ 0

分享下个开源小作品AndFileManage

好吧,我是鼓起勇气才来试试发帖的,我高中学生一名,第一个这样的作品,高人们,勿喷.....给我多点成长经验..... 感觉有些代码不是很简洁,希望可以指正 代码地址:http://code.google.com/...

Lohanry ⋅ 2012/08/03 ⋅ 7

仿 QQ 简易图片选择器--PhotoSelect

一个仿qq 简易图片选择器 使用recyclerview 设计的一个图片列表 加载图片 用的 glide 提高图片加载效率 使用方法: 导入依赖库 photoselectorlibrary 或者直接使用 compile 'com.px:photosel...

红色shi头 ⋅ 2016/09/18 ⋅ 1

DragonBones 4.6 新特性详解

虽然DragonBones 4.6是继4.5之后的一次小规模更新,数据格式也没有变化,但是DB4.6将是DragonBones版本历史上一个里程碑性的版本,因为在这个版本中,骨骼动画相关核心功能的开发彻底告一段落...

memda ⋅ 2016/05/17 ⋅ 6

自定义相册

简介 日常项目中很多时候都用到自定义相册展示以及图片多选,类似于微信在展示图片的首个可以直接拍照等功能。为了以后方便回顾以及学习,梳理了下知识编写了个小demo分享下,不喜勿喷! 步骤...

灿烂的黑土 ⋅ 2016/12/19 ⋅ 0

adnroid如何获取本地图片

adnroid如何获取本地图片,其中图片要以宫格形势显示,可以实现多选图片,点击提交后将选中的所有图片显示在列表中! 求指教???

歪脖小新 ⋅ 2013/10/28 ⋅ 0

C# winfrom 在窗体中怎么实现勾选checkbox删除图片(最好有源码!!谢谢!!)

如上图,我在数据库保存的是图片路径,现在怎么把它显示在一个窗体中,效果图如上面截图,然后但我勾选checkbox时 ,可以进行删除(可以多选,多删),求各位帮帮忙,很急 !!!最好给个案例...

华神再世 ⋅ 2012/11/24 ⋅ 3

ExtJS带复选框的下拉树对复选框中半选状态的实现

Extjs基本组件:带复选框的下拉树 首先,我们对于ExtJs实现的带复选框的下拉树应该有一个简单的了解,从下面的例子中可以看出,treepanel是通过节点中checked的值(true,false)来实现复选框...

海礁 ⋅ 2016/10/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 59分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 今天 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部