一 要求


完成下面的布局

二 分析


寻找规律,每一个UIView的x坐标和y坐标

三 实现思路


(1) 明确每一块用得是什么View;

(2) 明确每个View之间的父子关系,每个视图都只有一个父视图,拥有很多的子视图;

(3) 可以先尝试逐个的添加格子,最后考虑使用for循环,完成所有的UIView创建;

(4) 加载app数据,根据数据长度创建对应个数的格子;

(5) 添加格子内部的子控件

(6) 给内部的子控件装配数据

四 代码示例


 //
// RootViewController.m
// 九宫格坐标计算
//
// Created by lovestarfish on 15/11/1.
// Copyright © 2015年 S&G. All rights reserved.
// #import "RootViewController.h" @interface RootViewController ()
//* 数据源数组 /
@property (nonatomic,retain) NSArray *apps; @end @implementation RootViewController - (NSArray *)apps {
//1. 加载数据
if (!_apps) {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"app" ofType:@"plist"];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
self.apps = dic[@"app"];
}
return _apps;
} - (void)viewDidLoad {
[super viewDidLoad]; self.title = @"九宫格展示"; //2. 完成布局设计
//三列
int totalloc = ;
CGFloat appViewWidth = ;
CGFloat appViewHeight = ;
CGFloat margin = (self.view.frame.size.width- totalloc * appViewWidth) / (totalloc + );
int appCount = (int)self.apps.count;
for (int i = ; i < appCount; i++) {
int row = i / totalloc;//行号
int loc = i % totalloc;//列号
CGFloat appViewX = margin + (margin + appViewWidth) * loc;
CGFloat appViewY = margin + (margin + appViewHeight) * row;
//创建UIView控件
UIView *appView = [[UIView alloc] initWithFrame:CGRectMake(appViewX, appViewY + , appViewWidth, appViewHeight)];
[self.view addSubview:appView];
[appView release]; //创建UIView控件中的子视图
UIImageView *appImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
appImageView.image = [UIImage imageNamed:self.apps[i][@"image"]];
appImageView.contentMode = UIViewContentModeScaleAspectFit;
[appView addSubview:appImageView];
[appImageView release]; //创建文本标签
UILabel *appLabel = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
appLabel.text = self.apps[i][@"name"];
appLabel.textAlignment = NSTextAlignmentCenter;
appLabel.font = [UIFont systemFontOfSize:];
[appView addSubview:appLabel];
[appLabel release]; //创建按钮
UIButton *appButton = [UIButton buttonWithType:UIButtonTypeSystem];
appButton.frame = CGRectMake(, , , );
[appButton setTitle:@"下载" forState:UIControlStateNormal];
appButton.backgroundColor = [UIColor greenColor];
appButton.titleLabel.font = [UIFont systemFontOfSize:];
[appButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[appView addSubview:appButton];
[appButton addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
}
} /**
* 下载按钮的响应事件
*/
- (void)click {
//动画标签
UILabel *animaLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.view.center.x - , self.view.center.y - + , , )];
animaLabel.text = @"下载成功";
animaLabel.font = [UIFont systemFontOfSize:];
animaLabel.textAlignment = NSTextAlignmentCenter;
animaLabel.backgroundColor = [UIColor brownColor];
animaLabel.alpha = ;
[self.view addSubview:animaLabel];
[animaLabel release]; //执行完之后,还得把这给删除了,推荐使用block动画
[UIView animateWithDuration:4.0 animations:^{
animaLabel.alpha = 1.0;
} completion:^(BOOL finished) {
[animaLabel removeFromSuperview];
}]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} @end

五 执行效果


 

iOS开发 -------- 九宫格坐标计算的更多相关文章

  1. iOS开发UI篇—九宫格坐标计算

    iOS开发UI篇—九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...

  2. iOS开发UI篇——九宫格坐标计算

    一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系,每个视图都只有一个父视 ...

  3. iOS开发 百度坐标点的计算

    BMKMapPoint point1 = BMKMapPointForCoordinate(_userGps); BMKMapPoint point2 = BMKMapPointForCoordina ...

  4. iOS开发小技巧--计算label的Size的方法总结

    计算label的Size方法 sizeWithAttributes:方法 适用于不换行的情况,宽度不受限制的情况 /// 根据指定文本和字体计算尺寸 - (CGSize)sizeWithText:(N ...

  5. iOS开发 火星坐标转百度坐标

    CLLocationCoordinate2D coor = CLLocationCoordinate2DMake(latitude, longitude);//原始坐标 //转换 google地图.s ...

  6. iOS开发 百度坐标转火星坐标

    - (CLLocationCoordinate2D)hhTrans_GCGPS:(CLLocationCoordinate2D)baiduGps { const double x_pi = 3.141 ...

  7. iOS开发基础-九宫格坐标(1)

    一.功能分析 1)以九宫格展示图片信息,每一个 UIView 包含一个 UIImageView .一个 UILabel 和一个 UIButton . 2)加载App数据,根据数据长度创建对应的格子数: ...

  8. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  9. iOS开发基础-九宫格坐标(6)

    继续对iOS开发基础-九宫格坐标(5)中的代码进行优化. 优化思路:把字典转模型部分的数据处理操作也拿到模型类中去实现,即将 ViewController 类实现中 apps 方法搬到 WJQAppI ...

随机推荐

  1. IIS 8.0 Using ASP.NET 3.5 and ASP.NET 4.5微软官方安装指导

    from:https://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-using-aspnet-35-and-aspnet-45 S ...

  2. php核心纪要 整理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. hdu4787 AC自动机加分块

    这题说的是 有n次操作 +w 表示读入一个字符串,?p 询问这个字符串的子串在那些模板串中有多少个, http://blog.csdn.net/qq574857122/article/details/ ...

  4. python 解码json数据并在一个OrderdDict中保留其顺序

    一般来讲,JSON 解码会根据提供的数据创建dicts 或lists.如果你想要创建其他类型的对象,可以给json.loads() 传递object_pairs_hook 或object_hook 参 ...

  5. flask实战-个人博客-使用蓝本模块化程序

    使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...

  6. 转:CTE(公共表表达式)——WITH子句

    来自:<Microsoft SQL Server 2008技术内幕:T-SQL语言基础> 一.公共表表达式(CTE,Common Table Expression)是在SQL Server ...

  7. Step5:SQL Server 跨网段(跨机房)FTP复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 参考文献(References) ...

  8. router.go,router.push,router.replace的区别

    除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现.当你点击 <router-link> 时,这个 ...

  9. 介绍Python中6个序列的内置类型

    1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...

  10. sparkStrming 实时插入 mysql 今天使用echart 实现了简单数据展示 很low 但学习必须加深