ifish/Ifish/UMCommunity/UMCommunitySDK/UMCommunityUI/CustomView/AddImageView/UMComAddedImageView.m

1102 lines
34 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// UMComAddedImageView.m
// UMCommunity
//
// Created by luyiyuan on 14/9/11.
// Copyright (c) 2014年 Umeng. All rights reserved.
//
#import "UMComAddedImageView.h"
#import "UMComActionPickerAddView.h"
#import "UMComAddedImageCellView.h"
#import <UMComFoundation/UMUtils.h>
#import "UMComActionDeleteView.h"
NSInteger const g_AddedImageView_MaxLine = 3;//显示图片最大的行数
NSInteger const g_AddedImageView_MinLine = 1;//显示图片最小的行数
NSInteger const g_AddedImageView_IMGCountPerLine = 4;//一行图片的个数
NSInteger const g_AddedImageView_LeftMargin = 15;//最左边缘的距离
NSInteger const g_AddedImageView_RightMargin = 15;//最左边缘的距离
NSInteger const g_AddedImageView_TopMargin = 5;//最上边缘的距离
NSInteger const g_AddedImageView_BottomMargin = 5;//最下边缘的距离
NSInteger const g_AddedImageView_VerSpaceBetweenImg = 5;//图片间的垂直间距
//brief的值
NSInteger const g_BriefAddedImageView_MaxLine = 3;//显示图片最大的行数
NSInteger const g_BriefAddedImageView_MinLine = 1;//显示图片最小的行数
NSInteger const g_BriefAddedImageView_IMGCountPerLine = 4;//一行图片的个数
NSInteger const g_BriefAddedImageView_LeftMargin = 15;//最左边缘的距离
NSInteger const g_BriefAddedImageView_RightMargin = 15;//最左边缘的距离
NSInteger const g_BriefAddedImageView_TopMargin = 20;//最上边缘的距离
NSInteger const g_BriefAddedImageView_BottomMargin = 10;//最下边缘的距离
NSInteger const g_BriefAddedImageView_VerSpaceBetweenImg = 20;//图片间的垂直间距
NSInteger const g_BriefAddedImageView_DefaultWidth = 60;//图片的默认宽度
NSInteger const g_BriefAddedImageView_DefaultHeight = 60;//图片的默认高度
NSInteger const g_BriefAddedImageView_DefaultImageSpace = 15;//图片间的默认间距
@interface UMComAddedImageView()
{
UMComActionDeleteViewType _deleteViewType;
CGSize _intrinsicSize;
}
@property (nonatomic,strong,readwrite) NSMutableArray *arrayImages;
@property (nonatomic,strong) UMComActionPickerAddView *actionView;
@property (nonatomic, assign) CGFloat imageSpace ;
@property (nonatomic, assign) CGFloat maxTotalCount;
-(void) computeCell:(UIView*)view WithCurIndex:(NSUInteger)curIndex;
@end
@implementation UMComAddedImageView
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.actionView = [[UMComActionPickerAddView alloc] init];
//添加触控
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)];
[self.actionView addGestureRecognizer:tapGesture];
_itemSize = CGSizeMake(50.f, 50.f);
self.backgroundColor = [UIColor whiteColor];
[self addSubview:self.actionView];
self.arrayImages = [NSMutableArray array];
self.maxTotalCount = 9;
}
return self;
}
-(void) setIsDashWithBorder:(BOOL)isDashWithBorder
{
self.actionView.isDashWithBorder = isDashWithBorder;
}
-(BOOL) isDashWithBorder
{
return self.actionView.isDashWithBorder;
}
-(void) setDeleteViewType:(UMComActionDeleteViewType)deleteViewType
{
_deleteViewType = deleteViewType;
}
-(UMComActionDeleteViewType) deleteViewType
{
return _deleteViewType;
}
- (void)setItemSize:(CGSize)itemSize
{
_itemSize = itemSize;
self.imageSpace = (self.frame.size.width - itemSize.width*4)/5;
}
- (void)deleteImageAtIndex:(NSInteger)index
{
if(index>=0&&index<[self.arrayImages count])
{
UMComAddedImageCellView *iv = self.arrayImages[index];
[iv removeFromSuperview];
[self.arrayImages removeObjectAtIndex:index];
for(NSInteger i = index;i< self.arrayImages.count;i++)
{
UMComAddedImageCellView *iv = self.arrayImages[i];
iv.frame = CGRectMake((i-4*(i/4))*(self.imageSpace +self.itemSize.width)+self.imageSpace , (i/4)*(self.itemSize.height+self.imageSpace )+self.imageSpace /2, self.itemSize.width, self.itemSize.height);
iv.curIndex = i;
}
[self reloadData];
if (self.imagesDeleteFinish) {
self.imagesDeleteFinish(index);
}
}
}
- (void)tapImageView:(UITapGestureRecognizer *)tapGesture
{
if (tapGesture.view == self.actionView) {
if(self.pickerAction)
{
self.pickerAction();
}
}else{
if (_actionWithTapImages) {
_actionWithTapImages();
}
}
}
- (void)doOldAddImages:(NSArray *)images
{
CGFloat imageSpace = (int)(self.frame.size.width - self.itemSize.width*4)/5;
self.imageSpace = imageSpace ;
if (!self.isAddImgViewShow) {
if (images.count == 0) {
return;
}
}
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
iv.deleteViewType = self.deleteViewType;
NSInteger index = self.arrayImages.count;
iv.frame = CGRectMake((index-4*(index/4))*(imageSpace +self.itemSize.width)+imageSpace , (index/4)*(self.itemSize.height+imageSpace )+imageSpace /2, self.itemSize.width, self.itemSize.height);
iv.curIndex = index;
[iv setHandle:^(UMComAddedImageCellView *iv){
[self deleteImageAtIndex:iv.curIndex];
}];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapImageView:)];
[iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
}
[self reloadData];
}
- (void)reloadData
{
if(self.arrayImages.count<=self.maxTotalCount && self.arrayImages.count > 0)
{
NSInteger index = self.arrayImages.count;
[self.actionView setFrame:CGRectMake((index-4*(index/4))*(self.imageSpace +self.itemSize.width)+self.imageSpace , (index/4)*(self.itemSize.height+self.imageSpace )+self.imageSpace /2, self.itemSize.width, self.itemSize.height)];
;
[self.actionView setNeedsDisplay];
if (!self.isAddImgViewShow) {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.itemSize.height + self.imageSpace /2);
}
self.contentSize = CGSizeMake(self.frame.size.width, (self.imageSpace +self.itemSize.height)*(self.arrayImages.count/4 + 1));
if (self.arrayImages.count == self.maxTotalCount) {
self.actionView.hidden = YES;
}else{
self.actionView.hidden = NO;
}
}else if (self.arrayImages.count == 0){
if(self.isAddImgViewShow)
{
self.actionView.hidden = NO;
int offsetx = (self.bounds.size.height - self.itemSize.height)/2;
self.actionView.frame = CGRectMake(15, offsetx, self.itemSize.width, self.itemSize.height);
}
else
{
self.actionView.hidden = YES;
}
}else{
self.actionView.hidden = YES;
}
if (self.arrayImages.count > self.maxTotalCount) {
NSArray *temArray = [self.arrayImages subarrayWithRange:NSMakeRange(0, self.maxTotalCount)];
[self.arrayImages removeAllObjects];
[self.arrayImages addObjectsFromArray:temArray];
}
if (self.imagesChangeFinish) {
self.imagesChangeFinish();
}
}
/*****************************************************/
//新论坛的方法
/*****************************************************/
- (void)addImages:(NSArray *)images
{
if (!self.isUsingForumMethod) {
[self doOldAddImages:images];
}
else
{
//[self doNewAddImages:images];
[self doNewAddImagesForForum:images];
}
}
/**
* 计算每个cell的位置
*
* @param curIndex 当前的数组中的位置
* @param showCellCount 当前要显示的cell的个数包括+
*/
-(void) computeCell:(UIView*)view WithCurIndex:(NSUInteger)curIndex
{
NSUInteger horSpace = self.imageSpace;
NSUInteger verSpace = (self.bounds.size.height - self.itemSize.height) /2;
NSUInteger row = curIndex / g_AddedImageView_IMGCountPerLine;
NSUInteger colunm = curIndex % g_AddedImageView_IMGCountPerLine;
NSUInteger temp_x = colunm * (self.itemSize.width + horSpace) + g_AddedImageView_LeftMargin;
NSUInteger temp_y = row * (self.itemSize.height + verSpace) + g_AddedImageView_TopMargin;
view.frame = CGRectMake(temp_x, temp_y, self.itemSize.width, self.itemSize.height);
}
/**
* 删除cell的函数
*
* @param index 当前arrayImages的索引
*/
- (void)doNewdeleteImageAtIndex:(NSInteger)index
{
if(index>=0&&index<[self.arrayImages count])
{
UMComAddedImageCellView *iv = self.arrayImages[index];
[iv removeFromSuperview];
[self.arrayImages removeObjectAtIndex:index];
for(NSInteger i = index;i< self.arrayImages.count;i++)
{
UMComAddedImageCellView *iv = self.arrayImages[i];
iv.curIndex = i;
}
[self doNewReloadData];
if (self.imagesDeleteFinish) {
self.imagesDeleteFinish(index);
}
}
}
/**
* 增加数据
*
* @param images 图片数组
*/
-(void) doNewAddImages:(NSArray *)images
{
if (self.itemSize.height <= 0 || self.itemSize.width <= 0) {
return;
}
CGFloat imageSpace = (int)(self.frame.size.width - self.itemSize.width*4)/5;
self.imageSpace = imageSpace;
if (!self.isAddImgViewShow) {
if (images.count == 0) {
return;
}
}
NSInteger index = [self.arrayImages count];
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
iv.frame = CGRectMake(0, 0, self.itemSize.width, self.itemSize.height);
iv.deleteViewType = self.deleteViewType;
iv.curIndex = index;
[iv setHandle:^(UMComAddedImageCellView *iv){
[self doNewdeleteImageAtIndex:iv.curIndex];
}];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapImageView:)];
[iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
index++;
}
[self doNewReloadData];
}
- (void)doNewReloadData
{
NSInteger compare_zero = 0.f;
NSInteger imageMaxIndex = 0;
UIView* lastView = self.actionView;
if(self.arrayImages.count<= self.maxTotalCount && self.arrayImages.count > compare_zero)
{
for(UMComAddedImageCellView *iv in self.arrayImages)
{
[self computeCell:iv WithCurIndex:iv.curIndex];
imageMaxIndex = iv.curIndex;
lastView = iv;
}
//判断+是否隐藏或者显示的位置
if (imageMaxIndex < self.maxTotalCount -1 ) {
self.actionView.hidden = NO;
lastView = self.actionView;
imageMaxIndex = imageMaxIndex + 1;
[self computeCell:lastView WithCurIndex:imageMaxIndex];
}
else{
self.actionView.hidden = YES;
imageMaxIndex = imageMaxIndex;
}
}
else if(self.arrayImages.count == compare_zero){
if(self.isAddImgViewShow)
{
//method 1
// self.actionView.hidden = NO;
// lastView = self.actionView;
// imageMaxIndex = 0;
// [self computeCell:lastView WithCurIndex:imageMaxIndex];
/**
* method2
*/
self.actionView.hidden = NO;
int offsetx = (self.bounds.size.height - self.itemSize.height)/2;
self.actionView.frame = CGRectMake(15, offsetx, self.itemSize.width, self.itemSize.height);
}
else
{
self.actionView.hidden = YES;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 0);
}
}
else{
self.actionView.hidden = YES;
}
//设置scrollview的contentsize
self.contentSize = CGSizeMake(self.bounds.size.width, lastView.frame.origin.y + lastView.frame.size.height + self.imageSpace);
//NSLog(@"self.contentSize = %f",self.contentSize.height);
//回调
if (self.imagesChangeFinish) {
self.imagesChangeFinish();
}
}
/*****************************************************/
//新论坛的方法2.4版本
/*****************************************************/
/**
* 设置预定义的最大高度
*
* @return 最大高度
*/
-(NSInteger)preMaxHeightForForum
{
NSInteger preMaxHeight = g_AddedImageView_TopMargin + g_AddedImageView_BottomMargin +
g_AddedImageView_MaxLine * self.itemSize.height + (g_AddedImageView_MaxLine -1) * g_AddedImageView_VerSpaceBetweenImg;
return preMaxHeight;
}
/**
* 设置预定义的最小高度
*
* @return 最小高度
*/
-(NSInteger)preMinHeightForForum
{
NSInteger preMinHeight = g_AddedImageView_TopMargin + g_AddedImageView_BottomMargin +
g_AddedImageView_MinLine * self.itemSize.height + (g_AddedImageView_MinLine -1) * g_AddedImageView_VerSpaceBetweenImg;
return preMinHeight;
}
/**
* 计算每个cell的位置
*
* @param curIndex 当前的数组中的位置
* @param showCellCount 当前要显示的cell的个数包括+
*/
-(void) computeCellForForum:(UIView*)view WithCurIndex:(NSUInteger)curIndex
{
NSUInteger horSpace = self.imageSpace;
NSUInteger verSpace = g_AddedImageView_VerSpaceBetweenImg;
NSUInteger row = curIndex / 4;
NSUInteger colunm = curIndex % 4;
NSUInteger temp_x = colunm * (self.itemSize.width + horSpace) + g_AddedImageView_LeftMargin;
NSUInteger temp_y = row * (self.itemSize.height + verSpace) + g_AddedImageView_TopMargin;
view.frame = CGRectMake(temp_x, temp_y, self.itemSize.width, self.itemSize.height);
}
-(void) notifyImagesChangeFinishForForum
{
//回调
if (self.imagesChangeFinish) {
self.imagesChangeFinish();
}
}
- (void)doNewReloadDataForForum
{
NSInteger compare_zero = 0.f;
NSInteger imageMaxIndex = 0;
UIView* firstView = self.actionView;
UIView* lastView = firstView;
if(self.arrayImages.count <= self.maxTotalCount && self.arrayImages.count > compare_zero)
{
for(UMComAddedImageCellView *iv in self.arrayImages)
{
NSInteger curIndex = iv.curIndex;
if (self.arrayImages.count == self.maxTotalCount) {
firstView.hidden = YES;
}
else
{
firstView.hidden = NO;
curIndex += 1;
}
imageMaxIndex = curIndex;
lastView = iv;
[self computeCellForForum:iv WithCurIndex:curIndex];
// NSLog(@"iv%ld:[%f,%f:%f,%f]",(long)iv.curIndex,iv.frame.origin.x,
// iv.frame.origin.y,iv.frame.size.width,iv.frame.size.height);
}
[self computeCell:firstView WithCurIndex:0];
}
else if(self.arrayImages.count == compare_zero){
if(self.isAddImgViewShow)
{
//method 1
// self.actionView.hidden = NO;
// lastView = self.actionView;
// imageMaxIndex = 0;
// [self computeCell:lastView WithCurIndex:imageMaxIndex];
/**
* method2
*/
self.actionView.hidden = NO;
int offsetx = (self.bounds.size.height - self.itemSize.height)/2;
self.actionView.frame = CGRectMake(g_AddedImageView_LeftMargin, offsetx, self.itemSize.width, self.itemSize.height);
}
else
{
self.actionView.hidden = YES;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 0);
}
}
else{
self.actionView.hidden = YES;
}
//先计算最后一个控件的位置来确定自己的bound 和 contentsize
CGRect orgBounds = self.bounds;
CGRect lastFrame = lastView.frame;
NSInteger curMaxHeight = lastFrame.origin.y + lastFrame.size.height + g_AddedImageView_BottomMargin;
NSInteger curContentSizeHeight = curMaxHeight;
NSInteger curBoundsHeight = curMaxHeight;
//计算最大的高度和最小的高度
NSInteger preMaxHeight = [self preMaxHeightForForum];
NSInteger preMinHeight = [self preMinHeightForForum];
//判断当前的高度和预定义的高度来决定contentsize 和自己本身的高度
if(curBoundsHeight <= preMinHeight)
{
curBoundsHeight = preMinHeight;
}
else if(curBoundsHeight >= preMaxHeight)
{
curBoundsHeight = preMaxHeight;
}
else{}
if (orgBounds.size.height != curBoundsHeight) {
orgBounds.size.height = curBoundsHeight;
self.bounds = orgBounds;
}
if (_intrinsicSize.height > 0) {
self.bounds = CGRectMake(0, 0, _intrinsicSize.width, _intrinsicSize.height);
}
//设置scrollview的contentsize
self.contentSize = CGSizeMake(self.bounds.size.width, curContentSizeHeight);
//NSLog(@"self.contentSize = %f",self.contentSize.height);
// //回调
// if (self.imagesChangeFinish) {
// self.imagesChangeFinish();
// }
}
/**
* 删除cell的函数
*
* @param index 当前arrayImages的索引
*/
- (void)doNewdeleteImageAtIndexForForum:(NSInteger)index
{
if(index>=0&&index<[self.arrayImages count])
{
UMComAddedImageCellView *iv = self.arrayImages[index];
[iv removeFromSuperview];
[self.arrayImages removeObjectAtIndex:index];
for(NSInteger i = index;i< self.arrayImages.count;i++)
{
UMComAddedImageCellView *iv = self.arrayImages[i];
iv.curIndex = i;
}
[self doNewReloadDataForForum];
if (self.imagesDeleteFinish) {
self.imagesDeleteFinish(index);
}
[self notifyImagesChangeFinishForForum];
}
}
/**
* 2.4版本的新方法
*
* @param images 增加的图片
*/
-(void) doNewAddImagesForForum:(NSArray *)images
{
if (self.itemSize.height <= 0 || self.itemSize.width <= 0) {
return;
}
CGFloat imageSpace =(int) (self.frame.size.width - g_AddedImageView_LeftMargin -g_AddedImageView_RightMargin -self.itemSize.width*(g_AddedImageView_IMGCountPerLine)) / (g_AddedImageView_IMGCountPerLine - 1);
self.imageSpace = imageSpace;
if (!self.isAddImgViewShow) {
if (images.count == 0) {
return;
}
}
NSInteger index = [self.arrayImages count];
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
iv.frame = CGRectMake(0, 0, self.itemSize.width, self.itemSize.height);
iv.deleteViewType = self.deleteViewType;
iv.curIndex = index;
[iv setHandle:^(UMComAddedImageCellView *iv){
[self doNewdeleteImageAtIndexForForum:iv.curIndex];
}];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapImageView:)];
[iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
index++;
}
[self doNewReloadDataForForum];
[self notifyImagesChangeFinishForForum];
}
-(void) setIntrinsicSize:(CGSize)IntrinsicSize
{
_intrinsicSize = IntrinsicSize;
[self doNewReloadDataForForum];
}
@end
@interface UMComBriefAddedImageView()
{
UMComActionDeleteViewType _deleteViewType;
CGSize _intrinsicSize;
}
@property (nonatomic,strong,readwrite) NSMutableArray *arrayImages;
@property (nonatomic,strong) UMComActionPickerBriefAddView *actionView;
@property (nonatomic, assign) CGFloat maxCountPerRow ;
@property (nonatomic, assign) CGFloat maxTotalCount;
//@property (nonatomic, assign) CGFloat imageSpace;//item之间的距离
-(void) computeCell:(UIView*)view WithCurIndex:(NSUInteger)curIndex;
//用itemsize来决定imagespace
-(void) doAddImagesWithItemSize:(NSArray *)images;
//用imagespace来决定itemsize
- (void)doAddImagesWithSpace:(NSArray *)images;
-(void)doAddCommonImages:(NSArray *)images;
@end
@implementation UMComBriefAddedImageView
-(void)handleActionPickerBriefAddView:(id)target
{
if(self.pickerAction)
{
self.pickerAction();
}
}
- (void)tapBriefImageView:(UITapGestureRecognizer *)tapGesture
{
if (_actionWithTapImages)
{
self.actionWithTapImages();
}
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.actionView = [[UMComActionPickerBriefAddView alloc] init];
[self.actionView addTarget:self action:@selector(handleActionPickerBriefAddView:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:self.actionView];
self.arrayImages = [NSMutableArray array];
self.maxCountPerRow = 4;
self.maxTotalCount = 9;
}
return self;
}
- (void)setItemSize:(CGSize)itemSize
{
_itemSize = itemSize;
}
-(void) setNormalAddImg:(UIImage *)normalAddImg
{
self.actionView.normalAddImg = normalAddImg;
}
-(void) setHighlightedAddImg:(UIImage *)highlightedAddImg
{
self.actionView.highlightedAddImg = highlightedAddImg;
}
/*****************************************************/
//新论坛的方法2.4版本
/*****************************************************/
/**
* 设置预定义的最大高度
*
* @return 最大高度
*/
-(NSInteger)preMaxHeightForForum
{
NSInteger preMaxHeight = g_BriefAddedImageView_TopMargin + g_BriefAddedImageView_BottomMargin +
g_BriefAddedImageView_MaxLine * self.itemSize.height + (g_BriefAddedImageView_MaxLine -1) * g_BriefAddedImageView_VerSpaceBetweenImg;
return preMaxHeight;
}
/**
* 设置预定义的最小高度
*
* @return 最小高度
*/
-(NSInteger)preMinHeightForForum
{
NSInteger preMinHeight = g_BriefAddedImageView_TopMargin + g_BriefAddedImageView_BottomMargin +
g_BriefAddedImageView_MinLine * self.itemSize.height + (g_BriefAddedImageView_MinLine -1) * g_BriefAddedImageView_VerSpaceBetweenImg;
return preMinHeight;
}
/**
* 计算每个cell的位置
*
* @param curIndex 当前的数组中的位置
* @param showCellCount 当前要显示的cell的个数包括+
*/
-(void) computeCell:(UIView*)view WithCurIndex:(NSUInteger)curIndex
{
NSUInteger horSpace = self.imageSpace;
NSUInteger verSpace = (self.bounds.size.height - self.itemSize.height) /2;
NSUInteger row = curIndex / g_BriefAddedImageView_IMGCountPerLine;
NSUInteger colunm = curIndex % g_BriefAddedImageView_IMGCountPerLine;
NSUInteger temp_x = colunm * (self.itemSize.width + horSpace) + g_BriefAddedImageView_LeftMargin;
NSUInteger temp_y = row * (self.itemSize.height + verSpace) + g_BriefAddedImageView_TopMargin;
view.frame = CGRectMake(temp_x, temp_y, self.itemSize.width, self.itemSize.height);
}
/**
* 计算每个cell的位置
*
* @param curIndex 当前的数组中的位置
* @param showCellCount 当前要显示的cell的个数包括+
*/
-(void) computeCellForForum:(UIView*)view WithCurIndex:(NSUInteger)curIndex
{
NSUInteger horSpace = self.imageSpace;
NSUInteger verSpace = g_BriefAddedImageView_VerSpaceBetweenImg;
NSUInteger row = curIndex / 4;
NSUInteger colunm = curIndex % 4;
NSUInteger temp_x = colunm * (self.itemSize.width + horSpace) + g_BriefAddedImageView_LeftMargin;
NSUInteger temp_y = row * (self.itemSize.height + verSpace) + g_BriefAddedImageView_TopMargin;
view.frame = CGRectMake(temp_x, temp_y, self.itemSize.width, self.itemSize.height);
}
-(void) notifyImagesChangeFinishForForum
{
//回调
if (self.imagesChangeFinish) {
self.imagesChangeFinish();
}
}
- (void)doNewReloadDataForForum
{
NSInteger compare_zero = 0.f;
NSInteger imageMaxIndex = 0;
UIView* lastView = self.actionView;
if(self.arrayImages.count <= self.maxTotalCount && self.arrayImages.count > compare_zero)
{
for(UMComBriefAddedImageCellView *iv in self.arrayImages)
{
lastView = iv;
NSInteger curIndex = iv.curIndex;
imageMaxIndex = curIndex;
[self computeCellForForum:iv WithCurIndex:curIndex];
//NSLog(@"iv%ld:[%f,%f:%f,%f]",(long)iv.curIndex,iv.frame.origin.x,
// iv.frame.origin.y,iv.frame.size.width,iv.frame.size.height);
}
if (self.arrayImages.count + 1 > self.maxTotalCount) {
self.actionView.hidden = YES;
}
else
{
self.actionView.hidden = NO;
lastView = self.actionView;
[self computeCellForForum:lastView WithCurIndex:self.arrayImages.count];
}
}
else if(self.arrayImages.count == compare_zero){
if(self.isAddImgViewShow)
{
//method 1
// self.actionView.hidden = NO;
// lastView = self.actionView;
// imageMaxIndex = 0;
// [self computeCell:lastView WithCurIndex:imageMaxIndex];
/**
* method2
*/
self.actionView.hidden = NO;
int offsetx = (self.bounds.size.height - self.itemSize.height)/2;
self.actionView.frame = CGRectMake(g_BriefAddedImageView_LeftMargin, offsetx, self.itemSize.width, self.itemSize.height);
}
else
{
self.actionView.hidden = YES;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 0);
}
}
else{
self.actionView.hidden = YES;
}
//先计算最后一个控件的位置来确定自己的bound 和 contentsize
CGRect orgBounds = self.bounds;
CGRect lastFrame = lastView.frame;
NSInteger curMaxHeight = lastFrame.origin.y + lastFrame.size.height + g_BriefAddedImageView_BottomMargin;
NSInteger curContentSizeHeight = curMaxHeight;
NSInteger curBoundsHeight = curMaxHeight;
//计算最大的高度和最小的高度
NSInteger preMaxHeight = [self preMaxHeightForForum];
NSInteger preMinHeight = [self preMinHeightForForum];
//判断当前的高度和预定义的高度来决定contentsize 和自己本身的高度
if(curBoundsHeight <= preMinHeight)
{
curBoundsHeight = preMinHeight;
}
else if(curBoundsHeight >= preMaxHeight)
{
curBoundsHeight = preMaxHeight;
}
else{}
if (orgBounds.size.height != curBoundsHeight) {
orgBounds.size.height = curBoundsHeight;
CGRect orgFrame = self.frame;
self.bounds = orgBounds;
orgFrame.size.height = orgBounds.size.height;
self.frame = orgFrame;
}
if (_intrinsicSize.height > 0) {
self.bounds = CGRectMake(0, 0, _intrinsicSize.width, _intrinsicSize.height);
}
//设置scrollview的contentsize
self.contentSize = CGSizeMake(self.bounds.size.width, curContentSizeHeight);
//NSLog(@"self.contentSize = %f",self.contentSize.height);
// //回调
// if (self.imagesChangeFinish) {
// self.imagesChangeFinish();
// }
}
/**
* 删除cell的函数
*
* @param index 当前arrayImages的索引
*/
- (void)doNewdeleteImageAtIndexForForum:(NSInteger)index
{
if(index>=0&&index<[self.arrayImages count])
{
//UMComAddedImageCellView *iv = self.arrayImages[index];
UMComBriefAddedImageCellView *iv = self.arrayImages[index];
[iv removeFromSuperview];
[self.arrayImages removeObjectAtIndex:index];
for(NSInteger i = index;i< self.arrayImages.count;i++)
{
UMComAddedImageCellView *iv = self.arrayImages[i];
iv.curIndex = i;
}
[self doNewReloadDataForForum];
if (self.imagesDeleteFinish) {
self.imagesDeleteFinish(index);
}
[self notifyImagesChangeFinishForForum];
}
}
/**
* 2.4版本的新方法
*
* @param images 增加的图片
*/
-(void) doNewAddImagesForForum:(NSArray *)images
{
if (self.itemSize.height <= 0 || self.itemSize.width <= 0) {
return;
}
CGFloat imageSpace =(int) (self.frame.size.width - g_AddedImageView_LeftMargin -g_AddedImageView_RightMargin -self.itemSize.width*(g_AddedImageView_IMGCountPerLine)) / (g_AddedImageView_IMGCountPerLine - 1);
self.imageSpace = imageSpace;
// if (!self.isAddImgViewShow) {
// if (images.count == 0) {
// return;
// }
// }
NSInteger index = [self.arrayImages count];
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
iv.frame = CGRectMake(0, 0, self.itemSize.width, self.itemSize.height);
iv.deleteViewType = self.deleteViewType;
iv.curIndex = index;
[iv setHandle:^(UMComAddedImageCellView *iv){
[self doNewdeleteImageAtIndexForForum:iv.curIndex];
}];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapImageView:)];
[iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
index++;
}
[self doNewReloadDataForForum];
[self notifyImagesChangeFinishForForum];
}
-(void) setIntrinsicSize:(CGSize)IntrinsicSize
{
_intrinsicSize = IntrinsicSize;
[self doNewReloadDataForForum];
}
-(void)doAddCommonImages:(NSArray *)images
{
CGRect actionViewRC = self.actionView.bounds;
actionViewRC.size.width = self.itemSize.width;
actionViewRC.size.height = self.itemSize.height;
self.actionView.bounds = actionViewRC;
NSInteger index = [self.arrayImages count];
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
//UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
UMComBriefAddedImageCellView* iv = [[UMComBriefAddedImageCellView alloc] initWithImage:image];
iv.frame = CGRectMake(0, 0, self.itemSize.width, self.itemSize.height);
iv.deleteViewType = self.deleteViewType;
iv.deleteImg = self.deleteImg;
iv.curIndex = index;
[iv setHandle:^(UMComBriefAddedImageCellView *iv){
[self doNewdeleteImageAtIndexForForum:iv.curIndex];
}];
// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapBriefImageView:)];
// [iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
index++;
}
[self doNewReloadDataForForum];
[self notifyImagesChangeFinishForForum];
}
- (void)doAddImagesWithSpace:(NSArray *)images
{
CGFloat parentWidth = self.frame.size.width;
CGFloat itemWidth = (int)(parentWidth - (g_BriefAddedImageView_IMGCountPerLine+1)* self.imageSpace)/g_BriefAddedImageView_IMGCountPerLine;
if (itemWidth <= 0) {
//用默认的itemSize
self.itemSize = CGSizeMake(g_BriefAddedImageView_DefaultWidth, g_BriefAddedImageView_DefaultHeight);
[self doAddImagesWithItemSize:images];
return;
}
self.itemSize = CGSizeMake(itemWidth, itemWidth);
[self doAddCommonImages:images];
}
-(void) doAddImagesWithItemSize:(NSArray *)images
{
if (self.itemSize.height <= 0 || self.itemSize.width <= 0) {
return;
}
CGFloat imageSpace =(int) (self.frame.size.width - g_BriefAddedImageView_LeftMargin -g_BriefAddedImageView_RightMargin -self.itemSize.width*(g_BriefAddedImageView_IMGCountPerLine)) / (g_BriefAddedImageView_IMGCountPerLine - 1);
self.imageSpace = imageSpace;
if (imageSpace <= 0) {
//用默认的imageSpace
self.imageSpace = g_BriefAddedImageView_DefaultImageSpace;
}
[self doAddCommonImages:images];
}
- (void)addImages:(NSArray *)images
{
[self doAddImagesWithSpace:images];
//[self doAddImagesWithItemSize:images];
}
/*
- (void)addImages:(NSArray *)images
{
if (self.itemSize.height <= 0 || self.itemSize.width <= 0) {
return;
}
CGFloat imageSpace =(int) (self.frame.size.width - g_BriefAddedImageView_LeftMargin -g_BriefAddedImageView_RightMargin -self.itemSize.width*(g_BriefAddedImageView_IMGCountPerLine)) / (g_BriefAddedImageView_IMGCountPerLine - 1);
self.imageSpace = imageSpace;
NSInteger index = [self.arrayImages count];
for(UIImage *image in images)
{
if (self.arrayImages.count >= self.maxTotalCount) {
break;
}
//UMComAddedImageCellView *iv = [[UMComAddedImageCellView alloc] initWithImage:image];
UMComBriefAddedImageCellView* iv = [[UMComBriefAddedImageCellView alloc] initWithImage:image];
iv.frame = CGRectMake(0, 0, self.itemSize.width, self.itemSize.height);
iv.deleteViewType = self.deleteViewType;
iv.curIndex = index;
[iv setHandle:^(UMComBriefAddedImageCellView *iv){
[self doNewdeleteImageAtIndexForForum:iv.curIndex];
}];
// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapBriefImageView:)];
// [iv addGestureRecognizer:tap];
[self addSubview:iv];
[self.arrayImages addObject:iv];
index++;
}
[self doNewReloadDataForForum];
[self notifyImagesChangeFinishForForum];
}
*/
@end