之前做项目让实现多选相册的图片,自己写了一个demo一直保存在电脑上,今天下午发现电脑128G的容量已经快没有了,准备清理电脑,所以把之前做的一些demo放在博客上,以后方便用。
1.首先准备3个图片
2.定义单元格PhoCollectionViewCell
#importtypedef 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#import @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#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.效果