源代碼地址:https://github.com/EizoiOS/ImagePickerClass
效果圖如下:
在單元格上增加一張圖片,此處的實例是把背景陰影也一起做為一張圖片,平時可以通過一個VIEW來設置它的透明度;還要單元格給它賦于相應的點擊事件;
1:此為單元格視圖,用于處理選中的效果
EiaoAsset.h文件
@interface EizoAsset : UIView{ UIImageView * selectedView; // 創建一個ImageView -- 用來添加到選中的這個圖片上 BOOL selected; // 創建一個bool值 -- 用來標識有無選中}@PRoperty (strong,nonatomic)ALAsset * asset; // 通過ALAsset獲得相應的資源@property (assign , nonatomic) id parent;-(id)initWithAsset:(ALAsset*)asset;-(BOOL)selected;-(void)toggleSelection;@end
EiaoAsset.m文件:#import "EizoAsset.h"@interface EizoAsset(){ UIImageView * assetImageView; // 展示這個每一張圖片的ImageView}@end@implementation EizoAsset-(id)initWithAsset:(ALAsset *)asset { if (self = [super initWithFrame:CGRectMake(0, 0, 0, 0)]) { self.asset = asset; assetImageView = [[UIImageView alloc]init]; assetImageView.contentMode = UIViewContentModeScaleaspectFill; assetImageView.image = [UIImage imageWithCGImage:[self.asset thumbnail]]; // ALAsset的thumbnail是圖片的縮略圖 [self addSubview:assetImageView]; selectedView = [[UIImageView alloc]init]; selectedView.image = [UIImage imageNamed:@"Select.png"]; selectedView.hidden = YES; [self addSubview:selectedView]; } return self;}- (BOOL)selected { return !selectedView.hidden;}-(void)setSelected:(BOOL)_selected { [selectedView setHidden:!_selected];}// 在單元格 也就是上一個層面添加了一個手勢 點擊變化選中的狀態 也就是改變這個bool值- (void)toggleSelection { selectedView.hidden = !selectedView.hidden;}-(void)setFrame:(CGRect)frame { [super setFrame:frame]; assetImageView.frame = self.bounds; selectedView.frame = self.bounds;}@end
注意:這邊已經把選中的效果去加上去,只是讓它先隱藏起來,還設置它點擊觸發的事件;ALAsset就是數據模型,用來存一些圖片的數據;
2:單元格文件:
eiaoAssetCell.h文件
#import <UIKit/UIKit.h>#define topMargin 5@interface EizoAssetCell : UITableViewCell// 單元格的創建方法-(instancetype)initWithAssets:(NSArray *)assets reuseIdentifier:(NSString *)identifier;// 傳入這個assets的方法-(void)setAssets:(NSArray *)assets;// @property (nonatomic,retain) NSArray * linesAssets; // 傳入的圖片的數組 -- 應該是所有的圖片@endeiaoAssetCell.m 文件:#import "EizoAssetCell.h"#import "EizoAsset.h"@implementation EizoAssetCell-(instancetype)initWithAssets:(NSArray *)assets reuseIdentifier:(NSString *)identifier { if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]) { self.linesAssets = assets; } return self;}-(void)layoutSubviews { CGFloat h = self.bounds.size.height - topMargin; CGFloat margin = (self.bounds.size.width - 4 * h) / 5.0; CGRect frame = CGRectMake(margin,topMargin, h, h); for(EizoAsset * eizoAsset in self.linesAssets) { eizoAsset.frame = frame; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:eizoAsset action:@selector(toggleSelection)]; [eizoAsset addGestureRecognizer:tap]; [self addSubview:eizoAsset]; frame.origin.x = frame.origin.x + frame.size.width + margin; }}@end
注意:這邊最為重要的是在layoutSubviews里面的代碼,UITapGestureRecognizer把target指向上面創建的EizoAsset視圖,這樣便可以調用上面創建的選中及反選的事件;
新聞熱點
疑難解答