清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
该控件为自定义的实现瀑布流效果的控件,功能较为简单,并提供自定义delegate以供使用 功能会一步步完善起来 注意内存问题:不显示的image设成nil
控件分为.h 和 .m文件
效果图
控件分为3列来显示
-
.h文件包含协议声明和控件声明
@protocol UIPhotosViewDelegate <NSObject>
// 当点击某个图片时,返回该图片所在的UIImageView,参数即返回的imageview
- (void)clickedWithView:(UIImageView *)view;
@end
@interface UIPhotosView : UIView <UIPhotosViewDelegate> {
}
@property (nonatomic, assign) id<UIPhotosViewDelegate> delegate; // 自定义协议
@property (nonatomic, retain) UIView *leftView; // 左侧视图框
@property (nonatomic, retain) UIView *midView; // 中间视图框
@property (nonatomic, retain) UIView *rightView; // 右侧视图框
@property (nonatomic, assign) CGFloat subWidth; // 视图框的宽度,即1/3
- (void)addImage:(UIImage *)image; // 向控件加入一张图片
@end
2. .m文件包含控件实现
@implementation UIPhotosView
// 初始化
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
_subWidth = frame.size.width / 3.0;
_leftView = [[UIView alloc] init];
_leftView.frame = CGRectMake(0, 0, _subWidth, 1);
[self addSubview:_leftView];
_midView = [[UIView alloc] init];
_midView.frame = CGRectMake(_subWidth, 0, _subWidth, 1);
[self addSubview:_midView];
_rightView = [[UIView alloc] init];
_rightView.frame = CGRectMake(_subWidth*2, 0, _subWidth, 1);
[self addSubview:_rightView];
}
return self;
}
// 加入图片
- (void)addImage:(UIImage *)image {
CGFloat leftHeight = _leftView.frame.size.height;
CGFloat midHeight = _midView.frame.size.height;
CGFloat rightHeight = _rightView.frame.size.height;
UIImageView *view = [self createImageView:image]; // 创建imageview
CGFloat wid = _subWidth;
CGFloat hei = image.size.height / (image.size.width / _subWidth);
// 判断加入最短的view内
if (leftHeight <= midHeight && leftHeight <= rightHeight) {
[_leftView addSubview:view];
view.frame = CGRectMake(0, leftHeight, wid, hei);
leftHeight = leftHeight + hei;
_leftView.frame = CGRectMake(0, 0, wid, leftHeight);
}
else if (midHeight <= rightHeight) {
[_midView addSubview:view];
view.frame = CGRectMake(0, midHeight, wid, hei);
midHeight = midHeight + hei;
_midView.frame = CGRectMake(_subWidth, 0, wid, midHeight);
}
else {
[_rightView addSubview:view];
view.frame = CGRectMake(0, rightHeight, wid, hei);
rightHeight = rightHeight + hei;
_rightView.frame = CGRectMake(_subWidth*2, 0, wid, rightHeight);
}
// 调整当前控件的frame
CGFloat maxnum = [self max:leftHeight and:midHeight and:rightHeight];
self.frame = CGRectMake(0, 0, self.frame.size.width, maxnum);
}
// 创建imageview 并绑定事件
- (UIImageView *)createImageView:(UIImage *)image {
UIImageView *view = [[UIImageView alloc] initWithImage:image];
view.layer.borderWidth = 1.0;
view.layer.borderColor = [UIColor redColor].CGColor;
view.userInteractionEnabled = YES;
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] init];
[recognizer addTarget:self action:@selector(handleClicked:)];
[view addGestureRecognizer:recognizer];
return view;
}
// 点击view时获取imageview,传给delegate
- (void)handleClicked:(UITapGestureRecognizer *)recognizer {
UIImageView *view = recognizer.view;
[self.delegate clickedWithView:view];
}
- (CGFloat)max:(CGFloat)n1 and:(CGFloat)n2 and:(CGFloat)n3 {
CGFloat maxnum = n1 > n2 ? n1 : n2;
maxnum = maxnum > n3 ? maxnum : n3;
return maxnum;
}
@end
