iOS开发——UI篇&九宫格算法
九宫格算法
关于iOS开发中九宫格的实现虽然使用不多,而且后面会有更好的方实现,但是作为一个程序员必需要知道的就是九宫格算法的实现。
一:实现思路:
- (1)明确每一块用得是什么view
- (2)明确每个view之间的父子关系,每个视图都只有一个父视图,拥有很多的子视图。
- (3)可以先尝试逐个的添加格子,最后考虑使用for循环,完成所有uiview的创建
- (4)加载app数据,根据数据长度创建对应个数的格子
- (5)添加格子内部的子控件
- (6)给内部的子控件装配数据
二:算法的实现
/* * 总列数 */ NSUInteger totalloc = ; /* * View的宽高 */ CGFloat shopW = ; CGFloat shopH = ; /* * 每个View之间的间隔 */ CGFloat margin = (self.view.frame.size.width - totalloc * shopW) / (totalloc + ); /* * View的总个数 */ NSUInteger count = ; /* * 根据总个数使用总列数来除和取余获取对应的行和列 */ NSUInteger loc = count / totalloc; NSUInteger row = count % totalloc; /* * View的X和Y */ CGFloat shopX = margin + (margin + shopW) * row; CGFloat shopY = margin + (margin + shopH) * loc; /* * 创建自定义View,设置背景颜色,添加到界面上去 */ UIView *shopV = [[UIView alloc] initWithFrame:CGRectMake(shopX, shopY, shopW, shopH)]; shopV.backgroundColor = [UIColor lightGrayColor]; [self.shopView addSubview:shopV]; /* * 创建UIImageView用于放置图片,设置frame然后加到自定义的View上面 */ UIImageView *imageV = [[UIImageView alloc] init]; imageV.frame = CGRectMake(, , , ); [shopV addSubview:imageV]; /* * 创建UILabel用于放置显示文字,设置frame然后加到自定义的View上面 */ UILabel *l = [[UILabel alloc] init]; l.frame = CGRectMake(, , , ); l.textAlignment = NSTextAlignmentCenter; [shopV addSubview:l];
三:最后实现效果差不多就是这样的

注:在后面的学习中我们会学习使用UICollectionView和ios9新出的特性UIStackView可以非常简单实现九宫格,后面的文章里面我们再见吧!
iOS开发——UI篇&九宫格算法的更多相关文章
- iOS开发UI篇—九宫格坐标计算
iOS开发UI篇—九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...
- iOS开发UI篇——九宫格坐标计算
一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系,每个视图都只有一个父视 ...
- iOS开发UI篇—xib的简单使用
iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: ...
- iOS开发UI篇—CAlayer(自定义layer)
iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- iOS开发UI篇—懒加载
iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...
- iOS开发UI篇—CAlayer层的属性
iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...
- iOS开发UI篇—CAlayer(创建图层)
iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...
- iOS开发UI篇—CALayer简介
iOS开发UI篇—CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...
随机推荐
- HDU5787 K-wolf Number 数位dp
分析:赛场上也知道是裸的数位dp,但是无奈刷数位dp题刷的太少了,并不能写出来 一点感想:赛后补题,看了题解的map记录状态,一脸蒙逼,也是非常的不爽,然后想看别人写的,不是递归就是写的比较乱 而且我 ...
- http://blog.csdn.net/jbb0403/article/details/42102527
http://blog.csdn.net/jbb0403/article/details/42102527
- 【Opencv 小工具】鼠标选区信息获取
有时候在目标跟踪的算法初始化工作时候,需要选区一个Rect区域,来表示要跟着的目标,所以有次小工具. 使用QT和opencv 编写 项目地址 https://github.com/wzyuliyang ...
- 使用 svn://ip/filename 方式访问svn 资源库
a. 下载 SVN的官方网站为 http://subversion.tigris.org/,当前最新版本为1.4.2.Windows下的二进制安装包分为两种,一种是以setup结尾的安装文件,另一种是 ...
- Buffer -nodejs
纯 JavaScript 对 Unicode 友好但是无法很好地处理二进制数据.当我们面对类似 TCP 流或文件系统时,是需要处理八位流的.Node 有几种操作.创建以及消费八位流的策略.原始数据保存 ...
- 我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用)
#我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用) ##背景 之前的项目中,有很多的登记页面,一般都有100-200甚至更加多的字段,而且还涉及到字典.日期及其他效果的显示,载入时 ...
- MATLAB / Simulink on BeagleBone Black
转自:beagleboard@googlegroups.com邮件组 作者:kevind I have MATLAB / Simulink working with BeagleBone Black. ...
- UVALive 7274 Canvas Painting (优先队列)
Canvas Painting 题目链接: http://acm.hust.edu.cn/vjudge/contest/127406#problem/C Description http://7xjo ...
- [C语言 - 9] typedef
关键字typedef typedef 操作符可以看做是普通变量和类型之间的转换开关!! 例如 typedef int Integer;//定义了一种类型 int Integer;//定义了一个变量 ...
- EF入门 IQueryable和IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...