之前做项目让实现多选相册的图片,自己写了一个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)static NSInteger count = 0;@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 int groupNum = 0;[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-15)/4.0, ([UIScreen mainScreen].bounds.size.width-30)/4.0);return itemSize; }//定义展示的UICollectionViewCell的个数 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {return mutableAssets.count+1; } //每个UICollectionView展示的内容 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {static NSString * CellIdentifier = @"CollectionViewCell";PhoCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];if (indexPath.row==0) {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-1];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.效果