封装.抽取分类思想

1.分析界面,界面非常简单,界面内容固定,直接使用xib来描述

 

注意:使用xib要先绑定类,还需要连线

如果是在创建类的同时也创建xib就可以省略上面操作,   系统自动帮我们做了

 

 

2.登录注册界面分析

 

复杂界面(子控件非常多)

2.1划分结构(顶部,中间,底部)

2.2创建占位视图,占据结构位置

2.3一个结构一个结构做

 

 

3.把每一块结构都单独封装起来,   为什么?

 

方便以后需求变更,我们来改代码

封装的时候可以考虑两点:

1.如果界面是固定的,直接用xib来封装

2.如果该结构以后可能只是在当前界面位置变动,可以把结构模块封装到一个view里面(占位思想)

 

 

4.把登录模块封装到xib

 

4.1 图片圆角处理

1.自己给原来的图片设置圆角

self.loginButton.layer.cornerRadius = 5;

self.loginButton.layer.masksToBounds = YES;

//self.loginButton.clipsToBounds = YES;

2.用美工给的带圆角的图片,不过要设置可拉伸区域

为什么,图片会被拉伸的很难看(不规则的图片可能设置不成功)

bgImage = [bgImagestretchableImageWithLeftCapWidth:bgImage.size.width*0.5topCapHeight:bgImage.size.height*0.5];

在哪里设置?awakeFromNib

// 如果执行了awakeFromNib,说明当前控件在xib中所有属性全部设置好

// 只要在awakeFromNib里面,就能获取到xib中所有属性

 

 

5.设置输入文本框

5.1文本框有背景,怎么设置?

先设置一个ImageView,设置图片为背景图片

5.2 ImageView里面xib不能拖进去子控件?怎么办?

弄一个View,把ImageView放进去,View的大小正好是两个输入框的大小

5.3 在view里面拖进去两个UITextField 等分view

5.4 设置占位文字

 

 

6.抽取frame分类

 

6.1为什么抽取这个分类?

项目中很多地方都要用到frame.origin.x/y    frame.size.width / hight 我们不能直接修改,要先定义属性=frame.然后修改  再赋值回去很麻烦

6.2 给谁抽取分类?

给UIView抽取分类,所有的控件都能用了

6.3 怎么让自己的分类成员变量名称和其它人的名称不会重复

给成员变量名称加上类前缀

 

 

7.自定义快速登录视图

 

7.1 使用xib搭建界面

7.2 快速登录按钮需要自定义,为什么?

需求要求按钮内部图片在上, 文字在下,系统的是图片在左,文字在右

7.3 怎么自定义按钮

新建一个类继承UIButton   在layoutSubviews里面修改尺寸

7.4 运行发现 文字不能显示完全,为什么?

label的尺寸比文字的尺寸小,显示不完全

7.5 怎么解决

  1.计算文字的尺寸,让label的尺寸和文字尺寸一样就可以了

  2.让label尺寸自适应sizeToFit

- (void)layoutSubviews

{

// 一定要调用layoutSubviews

[superlayoutSubviews];

self.imageView.xmg_centerX=self.xmg_width*0.5;

self.imageView.xmg_y=0;

// 设置label尺寸

// 计算文字尺寸 设置label尺寸

//    CGFloat w = [self.titleLabel.text sizeWithFont:[UIFont systemFontOfSize:18]].width;

//    self.titleLabel.xmg_width = w;

[self.titleLabelsizeToFit];

// 设置中心点

self.titleLabel.xmg_centerX=self.xmg_width*0.5;

self.titleLabel.xmg_y=self.xmg_height-self.titleLabel.xmg_height;

}

 

 

8.xib注意点

 

8.1 加载xib的时候,要不要设置xib的frame?

要     如果一个控件通过xib加载,默认跟xib一样尺寸

如果一个View通过xib加载,需要再次设置frame

8.2 在哪里设置?在viewDidLoad设置子控件的frame,好不好?

不可以,viewDidLoad里面控制器View的子控件的尺寸还没有设置,viewDidLayoutSubviews会重新调整内部子控件的位置

viewDidLayoutSubviews:控制器的方法

layoutSubview:控件的方法

8.3 怎么拿到xib描述的View 设置约束?

  1. 定义成员变量,赋值

  2.xib的view都添加到对应的父控件中,我们可以从对应的父控件的subviews数组里面取

XTLoginRegisterView*registerView =_middleView.subviews.lastObject;

posted on 2016-08-01 08:57  尕小天  阅读(132)  评论(0编辑  收藏  举报

导航