之前做項目讓實現多選相冊的圖片,自己寫了一個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.效果