1、通过计算frame 的方式排列九宫格(九宫格算法)
1>九宫格算法分析
- 1)每一列的x值一样,列号决定x值
- 2)每一行的y值一样,行号决定y值
- 结论:要想计算出某个”方框”的x和y,就要先获取某个”方框”所在的“列索引”和“行索引”
2>通过修改 frame 实现九宫格排列
- 计算步骤:
- 1)确定每个app的宽和高
- 2)计算marginX,marginY,marginTop
- 3)计算每个app所在的行索引、列索引
- 4)根据当前app的行索引和列索引计算appX和appY
----------------------------------------------------------------------------代码区-------------------------------------------------------------------------------------
#pragma mark - 其他方法
- (void)viewDidLoad {
[super viewDidLoad];
// 计算九宫格坐标的代码
// 假设一行有3个
int columns = 3;
// 设置每个appView的frame
// 假设每个view的宽度和高度一定
CGFloat appW = 75;
CGFloat appH = 90;
// 计算边距(间隔)
// 计算屏幕的宽度
CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
CGFloat marginTop = 30;
// 水平方向的间距
CGFloat marginX = (screenW - appW * columns) / (columns + 1);
// 1. 根据self.apps中的数据创建对应的UIView, 并显示到界面上
for (int i = 0; i < self.apps.count; i++) {
// 获取每个应用的数据
NSDictionary *dict = self.apps[i];
// 创建一个UIView
UIView *appView = [[UIView alloc] init];
// 计算每个appView所在的列的索引
int col_idx = i % columns;
// 计算每个appView所在的行索引
int row_idx = i / columns;
// 计算每个appView的x和y
CGFloat appX = marginX + col_idx * (appW + marginX);
CGFloat appY = marginTop + row_idx * (appH + marginTop);
appView.frame = CGRectMake(appX, appY, appW, appH);
// 把appView添加到界面上
[self.view addSubview:appView];