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