你的位置:首页 > 操作系统

[操作系统]九宫格的计算思路


(以下图片在IE浏览器中可能无法显示)

在开始笔记之前先加点之前记下的小知识点:

UIView的常见属性和方法:

1.@property(nonatomic,radonly)UIView *superview;

  获得自己的父控件对象

2.@property (nonatomic,radonly,copy)NSArray *subviews;

  获得自己的所有子控件的对象(数组元素的顺序决定着子控件的显示层级顺序-下标越大的越显示在上面)

3.-(void)addSubview:(UIView *)view;

  添加一个子控件view

4.-(void)removeFromSuperView;

  从父控件中移除

5.-(UIView *)viewWithTag:(NSInteger)tag;

  根据一个tag标识找出对应的控件(一般都是子控件)

6.@property(nonatomic)CGRect frame;

  控件举行框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)

7.@property(nonatomic)CGRect bounds;

  控件矩形框的位置和尺寸(以自己的左上角为坐标原点,所以bounds的x,y一般为0)

8.@property(nonatomic)CGRect center;

  控件中点的位置(以父控件的左上角为坐标原点)


下面开始今天的笔记--九宫格的计算思路:

  • 利用控件的索引index计算出控件所在的行号和列号
  • 利用列号计算控件的x值
  • 利用行号计算控件的y值

小细节、碎知识:

  • 当添加多个控件时,控件的索引即为该控件所在数组长度
  • 某个控件所在列数为该控件的索引号对总列数取余;所在行数为该控件的索引号对总行数取模

代码示例(此代码是从一整段代码中截取,整段代码实现的功能是:点击添加按钮,向面板中添加商品,商品总数共两行三列):

  1. 先创建一个名为shopView的面板(即上图中的方块),用于存放图片和文字

  

注:shopViewW,shopViewH为先前定义过的确定数,shopX,shopY为后来计算得到。

  2.每点击一次按钮,就将一个商品添加到下个位置,每个商品的宽x2是固定的,因此为了计算下一个商品的x值,应先计算出x3的值,

这样,方块几的x值就是几倍的(x2+x3)的值。

        

注:shopsView为定义shopView的父控件,相当于上图中方块后面的白色背景面板。

到此,九宫格的计算思路和方法全部结束。


 

补充知识(以下均以shopsView为父控件):

  1.将超出父控件边界的控件减掉:self.shopsView.clipsToBounds = YES;

  2.取数组中的最后一个数据:[shopsView.subViews lastObject]

  3.删除父控件中的最后一个view:[[shopsView.subViews lastObject] removeFromSuperview];

  4.HUD:

    又名:指示器/蒙版/遮盖

    用于指示用户发生了什么事情。例如手机上会出现的“网络不稳定”这种提示。

定时任务小总结:

  1.performSelector

[self performSelector:(nonnull SEL) withObject:(nullable id) afterDelay:(NSTimeInterval)];

第一个参数指对方法的包装,使用时传@selector(方法名)

第二个参数会传给调用的方法里的参数,如果方法中无参数,则为nil

第三个参数填写时间-秒,实际是一个double值。

  2.GUD

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            code to be executed after a specified delay

        });

这里需要填的只有两处,即‘delayInSeconds’处填秒数,{}里填写代码,指‘delayInSeconds’秒后执行{}里的代码。

  3.NSTimer

[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval) target:(nonnull id) selector:(nonnull SEL) userInfo:(nullable id) repeats:(BOOL)];