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;