ifish/Ifish/UMCommunity/UMCommunitySDK/UMCommunityUI/CustomView/PhotoSelector/UMAssetsCollectionCell.m

185 lines
5.7 KiB
Objective-C

//
// UMAssetsCollectionCell.m
// UMCommunity
//
// Created by luyiyuan on 14/9/9.
// Copyright (c) 2014年 Umeng. All rights reserved.
//
#import "UMAssetsCollectionCell.h"
#import "UMAssetsCollectionGrid.h"
#import "UMComResouceDefines.h"
#define kPaddingX 5 // 左边距
#define kPaddingY 5 // 上边距
#define kSpaceX 5 // grid之间的水平边距
#define kSpaceY 5 // grid之间的上下边距
#define kTagPad 99
#define NUMBER_FOR_INDEX(x) [NSNumber numberWithInt:x]
static inline NSInteger tagToIndex(NSRange range,NSInteger tag)
{
return range.location + tag - kTagPad;
}
@interface UMAssetsCollectionCell()
@property (nonatomic,strong) NSMutableArray *gridViews;
@property (nonatomic,strong) NSMutableDictionary *assetsSelection;
@property (nonatomic,strong) NSMutableArray *assetsSelectionArr;//选择的图片
@property (nonatomic) NSRange range;
@end
@implementation UMAssetsCollectionCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.backgroundColor = [UIColor whiteColor];
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.gridViews = [[NSMutableArray alloc]init];
self.assetsSelectionArr = [NSMutableArray arrayWithCapacity:1];
}
return self;
}
- (void)setAssets:(NSArray *)assets
rowNumber:(NSUInteger)index
height:(NSUInteger)height
selection:(NSMutableDictionary *)selection
range:(NSRange)range
{
self.assets = assets;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, height);
self.assetsSelection = selection;
self.range = range;
[self addGridViewsRowNumber:index
rowHeight:height
selection:selection
range:range];
}
- (void)setAssets:(NSArray *)assets
rowNumber:(NSUInteger)index
height:(NSUInteger)height
selection:(NSMutableDictionary *)selection
range:(NSRange)range
selectionArray:(NSMutableArray *)selectionArray
{
self.assets = assets;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, height);
self.assetsSelection = selection;
self.range = range;
self.assetsSelectionArr = selectionArray;
[self addGridViewsRowNumber:index
rowHeight:height
selection:selection
range:range];
}
- (void)addGridViewsRowNumber:(NSUInteger)index
rowHeight:(NSUInteger)rowHeight
selection:(NSMutableDictionary *)selection
range:(NSRange)range
{
float width = self.bounds.size.width - 2*kPaddingX;
float height = rowHeight - kSpaceY;
float fitWidth = (width - kSpaceX*(4-1))/4;
float fitHeight = (index == 0 ? height - kSpaceY : height);
float y = (index == 0 ? kSpaceY : 0);
@autoreleasepool{
for(int i=0;i<[self.assets count];i++)
{
UMAssetsCollectionGrid *grid =(UMAssetsCollectionGrid *)[self viewWithTag:i+kTagPad];
CGRect frame = CGRectMake(kPaddingX+(i%(int)[self.assets count])*(fitWidth+kSpaceX),y, fitWidth, fitHeight);
if(grid == nil)
{
grid =[[UMAssetsCollectionGrid alloc] initWithFrame:frame];
[grid setAsset:self.assets[i]];
[grid setTag:i+kTagPad];
[self addSubview:grid];
// 保存grid
[_gridViews addObject:grid];
// 给Grid添加单击手势
UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)];
tapGes.numberOfTapsRequired = 1;
[grid addGestureRecognizer:tapGes];
}
else
{
NSNumber *number = [NSNumber numberWithInteger:tagToIndex(self.range,grid.tag)];
if([self.assetsSelection objectForKey:number])
{
[grid setIsSelected:YES];
}
else
{
[grid setIsSelected:NO];
}
[grid setFrame:frame];
[grid setAsset:self.assets[i]];
}
}
}
}
- (void)handleTap:(UITapGestureRecognizer *)tapGes
{
UMAssetsCollectionGrid *grid =(UMAssetsCollectionGrid *)[self viewWithTag:tapGes.view.tag];
NSNumber *number = [NSNumber numberWithInteger:tagToIndex(self.range,grid.tag)];
if ([self.assetsSelectionArr containsObject:number]) {
[self.assetsSelectionArr removeObject:number];
}
if([self.assetsSelection objectForKey:number])
{
[self.assetsSelection removeObjectForKey:number];
}
else
{
if([self.assetsSelection count]>=self.maximumNumberOfSelection)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_warning", @"警告") message:[NSString stringWithFormat:UMComLocalizedString(@"um_com_selectedMaxPics_template", @"当前最多选择%d张图片"),self.maximumNumberOfSelection] delegate:self cancelButtonTitle:UMComLocalizedString(@"um_com_ok", @"好的") otherButtonTitles:nil];
[alert show];
return;
}
[self.assetsSelectionArr addObject:number];
[self.assetsSelection setObject:number forKey:number];
}
[grid setIsSelected:!grid.isSelected];
}
@end