九宫格算法

关于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篇&九宫格算法的更多相关文章

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

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

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

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

  3. iOS开发UI篇—xib的简单使用

    iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: ...

  4. iOS开发UI篇—CAlayer(自定义layer)

    iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...

  5. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  6. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  7. iOS开发UI篇—CAlayer层的属性

    iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  8. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  9. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

随机推荐

  1. dell optiplex台式机 安装win7 清楚分区的方法

    http://jingyan.baidu.com/article/92255446e1065f851648f42b.html

  2. codeforces 260 div2 C题

    C题就是个dp,把原数据排序去重之后得到新序列,设dp[i]表示在前i个数中取得最大分数,那么: if(a[i] != a[i-1]+1)   dp[i] = cnt[a[i]]*a[i] + dp[ ...

  3. 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

    以数组的方法: public static void main(String[] args) {        final int n = 10;          final int k = 1;  ...

  4. wuzhicms访问统计实现方法

    实现目标:程序实现了对整站页面pv的统计文件的位置:coreframe/app/content/pv.php代码预览: /** * 总站访问次数统计 */ defined('IN_WZ') or ex ...

  5. bzoj 2599 [IOI2011]Race (点分治)

    [题意] 问树中长为k的路径中包含边数最少的路径所包含的边数. [思路] 统计经过根的路径.假设当前枚举到根的第S个子树,若x属于S子树,则有: ans<-dep[x]+min{ dep[y] ...

  6. Java-note-字符串转换为基本值

    Integer.parseInt() and Double.parse.double() 例: Integer.parseInt("123") 得到常量123

  7. HttpComponents 学习的两个重要文档

    httpcore-tutorial-simplified-chinese httpclient-tutorial-simplified-chinese

  8. Oracle 表数据去重

    Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题.今天我们要说的有两种方法. 一.根据rowid来去 ...

  9. BestCoder Round #73 (div.2)(hdu 5630)

    Rikka with Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  10. Quality Center配置邮箱服务

    Quality Center上要配置二个地方 mail direct pro配置 DNS地址是本机的地址就好了,不需要真实的DNS地址 SMTP端口使用普通的25就好了,不需要使用SSL的·465端口 ...