1.分析界面,界面非常簡單,界面內(nèi)容固定,直接使用xib來描述
注意:使用xib要先綁定類,還需要連線
如果是在創(chuàng)建類的同時也創(chuàng)建xib就可以省略上面操作, ? 系統(tǒng)自動幫我們做了
2.登錄注冊界面分析
復(fù)雜界面(子控件非常多)
1.劃分結(jié)構(gòu)(頂部,中間,底部)
2.創(chuàng)建占位視圖,占據(jù)結(jié)構(gòu)位置
3.一個結(jié)構(gòu)一個結(jié)構(gòu)做
3.把每一塊結(jié)構(gòu)都單獨封裝起來, ? 為什么?
方便以后需求變更,我們來改代碼
封裝的時候可以考慮兩點:
1.界面是固定不變的,直接用xib來封裝
2.如果該結(jié)構(gòu)以后可能只是在當(dāng)前界面位置變動,可以把結(jié)構(gòu)模塊封裝到一個view里面(占位思想)
4.把登錄模塊封裝到xib
4.1 圖片圓角處理
1.自己給原來的圖片設(shè)置圓角
self.loginButton.layer.cornerRadius = 5;
self.loginButton.layer.masksToBounds = YES;
//self.loginButton.clipsToBounds = YES;
2.用美工給的帶圓角的圖片,不過要設(shè)置可拉伸區(qū)域
為什么,圖片會被拉伸的很難看(不規(guī)則的圖片可能設(shè)置不成功)
bgImage = [bgImagestretchableImageWithLeftCapWidth:bgImage.size.width*0.5topCapHeight:bgImage.size.height*0.5];
在哪里設(shè)置?awakeFromNib
// 如果執(zhí)行了awakeFromNib,說明當(dāng)前控件在xib中所有屬性全部設(shè)置好
// 只要在awakeFromNib里面,就能獲取到xib中所有屬性
5.設(shè)置輸入文本框
5.1文本框有背景,怎么設(shè)置?
先設(shè)置一個ImageView,設(shè)置圖片為背景圖片
5.2 ImageView里面xib不能拖進去子控件?怎么辦?
弄一個View,把ImageView放進去,View的大小正好是兩個輸入框的大小
5.3 在view里面拖進去兩個UITextField 等分view
5.4 設(shè)置占位文字
6.抽取frame分類
6.1為什么抽取這個分類?
項目中很多地方都要用到frame.origin.x/y ? ?frame.size.width / hight 我們不能直接修改,要先定義屬性=frame.然后修改 ?再賦值回去很麻煩
6.2 給誰抽取分類?
給UIView抽取分類,所有的控件都能用了
6.3 怎么讓自己的分類成員變量名稱和其它人的名稱不會重復(fù)
給成員變量名稱加上類前綴
7.自定義快速登錄視圖
7.1 使用xib搭建界面
7.2 快速登錄按鈕需要自定義,為什么?
需求要求按鈕內(nèi)部圖片在上, 文字在下,系統(tǒng)的是圖片在左,文字在右
7.3 怎么自定義按鈕
新建一個類繼承UIButton ? 在layoutSubviews里面修改尺寸
7.4 運行發(fā)現(xiàn) 文字不能顯示完全,為什么?
label的尺寸比文字的尺寸小,顯示不完全
7.5 怎么解決
1.計算文字的尺寸,讓label的尺寸和文字尺寸一樣就可以了
2.讓label尺寸自適應(yīng)sizeToFit
- (void)layoutSubviews
{
// 一定要調(diào)用layoutSubviews
[superlayoutSubviews];
self.imageView.xmg_centerX=self.xmg_width*0.5;
self.imageView.xmg_y=0;
// 設(shè)置label尺寸
// 計算文字尺寸 設(shè)置label尺寸
//??? CGFloat w = [self.titleLabel.text sizeWithFont:[UIFont systemFontOfSize:18]].width;
//??? self.titleLabel.xmg_width = w;
[self.titleLabelsizeToFit];
// 設(shè)置中心點
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的時候,要不要設(shè)置xib的frame?
要如果一個控件通過xib加載,默認跟xib一樣尺寸
1.如果一個View通過xib加載,需要再次設(shè)置frame
8.2 在哪里設(shè)置?在viewDidLoad設(shè)置子控件的frame,好不好?
不可以,viewDidLoad里面控制器View的子控件的尺寸還沒有設(shè)置,viewDidLayoutSubviews會重新調(diào)整內(nèi)部子控件的位置
viewDidLayoutSubviews:控制器的方法
layoutSubview:控件的方法
8.3 怎么拿到xib描述的View 設(shè)置約束?
1. 定義成員變量,賦值
2.xib的view都添加到對應(yīng)的父控件中,我們可以從對應(yīng)的父控件的subviews數(shù)組里面取
XTLoginRegisterView*registerView =_middleView.subviews.lastObject;