185 lines
5.7 KiB
Objective-C
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
|