b&h&i&p 走个人的道路,接私活,网站建设app开发
最近学习IPHONE开发,很喜欢购物APP的瀑布流于是自己做了一个,结合网上的JSON数据,异步加载,在这里和大家分享一下
首先是头文件
waterfall.h
#import <Foundation/Foundation.h>
#import "QuartzCore/QuartzCore.h"
#import "../SBJSON/SBJson.h"
#import "EGOImageView.h"
@interface waterFall : NSObject
@property NSString *DataFromServer;
@property NSArray *imageWidths;
@property NSArray *imageHeights;
@property NSArray *imageSources;
@property float topDistance;
@property float rowWidth;
@property float rowDistance;
@property float fallHeight;
@property float itemOriginY_1st; //第一列高度
@property float itemOriginY_2nd; //第二列高度
@property float itemOriginY_3rd; //第三列高度
@property float itemOriginX_1st;
@property float itemOriginX_2nd;
@property float itemOriginX_3rd;
@property UIView *fall;
-(UIView *)createWaterFall:(NSArray *)imageSrc;
-(float)getFallHeigth;
-(void)addWaterFall;
@end
waterfall.m 主要是createWaterFall,addWaterFall基本和createWaterFall差不多
-(UIView *)createWaterFall:(NSArray *)imageSrc{
[self setRowWidth:100];
[self setRowDistance:5];
[self setItemOriginY_1st:3];
[self setItemOriginY_2nd:3];
[self setItemOriginY_3rd:3];
[self setItemOriginX_1st:rowDistance];
[self setItemOriginX_2nd:itemOriginX_1st+rowWidth+rowDistance];
[self setItemOriginX_3rd:itemOriginX_2nd+rowWidth+rowDistance];
UIView *view = [[UIView alloc] init];
float _fallHeight = 0;
[self setDataFromServer:[self getHttpRequst]];
[self initTableviewValueFromJSONData];
for (int i=0; i<self.imageWidths.count; i++) {
float minHeightItem = 0;
float imageX = 0;
float imageY = 0;
float changedHeight = 0;
changedHeight = rowWidth*[[self.imageHeights objectAtIndex:i] intValue]/[[self.imageWidths objectAtIndex:i] intValue] + 3;
minHeightItem = itemOriginY_1st;
if (itemOriginY_1st > itemOriginY_2nd) {
minHeightItem = itemOriginY_2nd;
imageX = itemOriginX_2nd;
itemOriginY_2nd = itemOriginY_2nd + changedHeight;
}else if (itemOriginY_1st > itemOriginY_3rd) {
minHeightItem = itemOriginY_3rd;
imageX = itemOriginX_3rd;
itemOriginY_3rd = itemOriginY_3rd + changedHeight;
}else {
imageX = itemOriginX_1st;
itemOriginY_1st = itemOriginY_1st + changedHeight;
}
imageY = minHeightItem;
EGOImageView *imageView = [[EGOImageView alloc] initWithFrame:CGRectMake(imageX, imageY, rowWidth, changedHeight - 3)];
[imageView setPlaceholderImage:[UIImage imageNamed:@"images/fall1.jpg"]];
NSURL *url = [NSURL URLWithString:[self.imageSources objectAtIndex:i]];
//NSLog([NSString stringWithFormat:@"http://192.168.10.69/fall%d.jpg",i]);
imageView.imageURL = url;
/*
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, rowWidth, changedHeight - 3)];
imageView.image = [UIImage imageNamed:@"images/fall1.jpg"];
imageView.layer.shadowColor = [UIColor blackColor].CGColor;
imageView.layer.shadowRadius = 3;
imageView.layer.shadowOffset = CGSizeMake(0, 0);
imageView.layer.shadowOpacity = 0.5;
*/
[view addSubview:imageView];
_fallHeight = itemOriginY_1st;
if (itemOriginY_1st < itemOriginY_2nd) {
_fallHeight = itemOriginY_2nd;
}else if (itemOriginY_1st < itemOriginY_3rd) {
_fallHeight = itemOriginY_3rd;
}
}
fallHeight = _fallHeight;
[self setFall:view];
return fall;
}
组合上SBJSON 的模块基本就OK了。
主要思路:分三列,定义宽度,先读取前三个,按宽度进行长度的缩放,然后判断三列中的长度最短列,再添加的时候添加到该列,如此循环,写的不是很好,各位看客有好的思路和想法,欢迎评论,谢谢

本文介绍了一种使用iOS开发实现瀑布流布局的方法。通过自定义视图控制器并利用SBJSON解析JSON数据,实现了动态加载图片的功能。文章详细展示了如何计算图片位置以达到瀑布流效果。

2万+

被折叠的 条评论
为什么被折叠?



