IOS多选单选相册图片
之前做项目让实现多选相册的图片,自己写了一个demo一直保存在电脑上,今天下午发现电脑128G的容量已经快没有了,准备清理电脑,所以把之前做的一些demo放在博客上,以后方便用。
1.首先准备3个图片
2.定义单元格PhoCollectionViewCell
#import <UIKit/UIKit.h> typedef void(^SelectBtnClickBlock) (BOOL isSelect); @interface PhoCollectionViewCell : UICollectionViewCell @property (weak ,nonatomic) IBOutlet UIImageView * imageView; @property (weak ,nonatomic) IBOutlet UIImageView * selectImageView; @property (nonatomic,copy) SelectBtnClickBlock selectBtnClickBlock; - (IBAction)selectBtnClick:(id)sender; @property (weak, nonatomic) IBOutlet UIButton *selectBtn; @end
#import "PhoCollectionViewCell.h" @implementation PhoCollectionViewCell - (void)awakeFromNib { // Initialization code } - (IBAction)selectBtnClick:(id)sender { UIButton *btn=(UIButton *)sender; btn.selected=!btn.selected; NSLog(@"%@",@"aaaa"); _selectBtnClickBlock(btn.selected); } @end
3.创建相片Model
#import <Foundation/Foundation.h> #import <AssetsLibrary/ALAssetsLibrary.h> @interface PhoModel : NSObject @property(nonatomic,strong) ALAsset *asset; @property (nonatomic,assign) BOOL isSelected; @end
#import "PhoModel.h" @implementation PhoModel @end
4.获取相册图片显示图片
#import "ViewController.h" #import <AssetsLibrary/AssetsLibrary.h> #import "AppDelegate.h" #import "PhoModel.h" #import "PhoCollectionViewCell.h" #define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate) ; @interface ViewController () { NSMutableArray *mutableAssets; } @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //获取相册中的全部照片 [self getAllPictures]; [_collectionView registerNib: [UINib nibWithNibName:@"PhoCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CollectionViewCell"]; } //获取相册中的全部照片 -(void)getAllPictures { mutableAssets = [[NSMutableArray alloc]init]; NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init]; NSMutableArray *assetGroups = [[NSMutableArray alloc] init]; __block NSMutableArray *tempMutableAssets = mutableAssets; __block ViewController *tempSelf = self; __block NSMutableArray *tempAssetGroups = assetGroups; [ApplicationDelegate.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop){ if (group != nil) { count = [group numberOfAssets]; __block ; [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){ if(asset != nil) { ++ groupNum; if([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) { [assetURLDictionaries addObject:[asset valueForProperty:ALAssetPropertyURLs]]; NSURL *url= (NSURL*) [[asset defaultRepresentation]url]; NSLog(@"%@,%@",[asset valueForProperty:ALAssetPropertyDate],url); // [UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]];//图片 // [UIImage imageWithCGImage:[result thumbnail]]; //缩略图 PhoModel *phoModel=[[PhoModel alloc]init]; phoModel.asset=asset; phoModel.isSelected=NO; [tempMutableAssets addObject:phoModel]; if (tempMutableAssets.count == groupNum) { [tempSelf allPhotosCollected:tempMutableAssets]; } } } }]; [tempAssetGroups addObject:group]; } }failureBlock:^(NSError *error){ NSLog(@"There is an error"); }]; } //所有asset -(void)allPhotosCollected:(NSMutableArray *)mutableAsset{ [self.collectionView reloadData]; } #pragma mark -- UICollectionViewDataSource - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize itemSize = CGSizeMake(([UIScreen mainScreen].bounds.size.width-)/)/4.0); return itemSize; } //定义展示的UICollectionViewCell的个数 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { ; } //每个UICollectionView展示的内容 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { static NSString * CellIdentifier = @"CollectionViewCell"; PhoCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; ) { cell.imageView.image = [UIImage imageNamed:@"0.png"]; cell.selectImageView.hidden=YES; cell.selectBtnClickBlock=^(BOOL isSelect) { NSLog(@"cell1 block"); }; return cell; } PhoModel *phoModel = mutableAssets[indexPath.row-]; cell.imageView.image = [UIImage imageWithCGImage:[phoModel.asset thumbnail]]; if (phoModel.isSelected) { cell.selectImageView.image=[UIImage imageNamed:@"2.png"]; } else { cell.selectImageView.image=[UIImage imageNamed:@"1.png"]; } cell.selectImageView.hidden=NO; cell.selectBtn.selected=phoModel.isSelected; cell.selectBtnClickBlock=^(BOOL isSelect) { //单选多选标记 false 单选 true 多选 BOOL issangal=false; if (issangal) { for (PhoModel *tmpPhotoModel in mutableAssets) { tmpPhotoModel.isSelected = NO; } } phoModel.isSelected=isSelect; [_collectionView reloadData]; }; return cell; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"%ld",indexPath.row); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
5.效果
IOS多选单选相册图片的更多相关文章
- ios获取摄像头与相册图片
iOS的一些设备上都安装了摄像头.现在绝大多数都有了. 在编程中,我们是用相应的东西来进行照相,录像等功能. 一.UIImagePickerController类 UIImagePickerCon ...
- iOS QRcode识别及相册图片二维码读取识别
https://www.jianshu.com/p/48e44fe67c1d 2016.03.30 10:32* 字数 892 阅读 16197评论 5喜欢 34赞赏 1 最近碰到一个用户 在使用我们 ...
- iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- 修正iOS从照相机和相册中获取的图片 方向
修正iOS从照相机和相册中获取的图片 方向 修正iOS从照相机和相册中获取的图片 方向 使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrie ...
- 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码
接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...
- ios 上传视频或图片
关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...
- iOS关于UILabel 基本属性 背景图片 背景色
[代码] iOS关于UILabel 基本属性 背景图片 背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- android开发之——获取相册图片和路径
Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managed ...
随机推荐
- 正则表达式REGEXP
正则表达式:REGular EXPression, REGEXP 元字符: .: 匹配任意单个字符 []: 匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集合:[:digit ...
- c# .NET RSA结合AES加密服务端和客户端请求数据
这几天空闲时间就想研究一下加密,环境是web程序,通过js请求后台返回数据,我想做的事js在发送请求前将数据加密,服务端收到后解密,待服务端处理完请求后,将处理结果加密返回给客户端,客户端在解密,于是 ...
- web api 请求结果中页面显示的json字符串与json对象结果不一致
我在前端调用这个api的时候也是百思不得其解,明明看到页面上的结果ID是不一样的,但是在js中使用的时候,却一直有重复ID的情况 后来才发现原来是long这个类型的原因,JavaScript中Numb ...
- OpenStack 业务链networking-sfc介绍 (1) - 概述
原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630355 1. Service Function Chain概述 Neutron ...
- 内置函数——sorted
对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本方法2.用built-in函数sorted ...
- IDEA中配置SpringMVC框架 第一个演示【转】
环境: intellij IDEA 2017 CI JDK 1.8 tomcat 8.5.23 具体步骤 1.新建项目 勾选Spring MVC .Web Application(勾选了Spring ...
- 关于一些blog优化
有很多的好看的$java\ script$ 可以大大的增加$blog$的好看度. 这里,本宝宝就列举几个 upd:不定期更新 1.有木有觉得背景的小姐姐和雪花特效极其的配啊啊啊!!! 页面定制CSS插 ...
- 解决修改完系统默认python版本后yum不可用的问题!!!!!!
文章转自: http://www.linuxidc.com/Linux/2013-05/84727.htm #vi /usr/bin/yum 将文件头部的: #!/usr/bin/python 改为: ...
- 如何在CentOS 7安装Node.js
最近,我一直对学习Node.js比较感兴趣.这是一个Java平台的服务器端编程 ,它允许开发人员在服务器编写Java代码,并且有许多CentOS的用户正努力学习这个语言的开发环境.这正是我想做这个教程 ...
- 推荐 9 个样式化组件的 React UI 库
简评:喜欢 CSS in JS 吗?本文将介绍一些使用样式组件所构建的 React UI 库,相信你会很感兴趣的. 在 React 社区,对 UI 组件进行样式化的讨论逐步从 CSS 模块到内联 CS ...