知識點(diǎn)回顧
開發(fā)方式:使用代碼搭建框架映企,因?yàn)椴势盿pp的界面非常多悟狱,使用代碼搭建方便后期維護(hù)
-
環(huán)境部署
- app支持的iOS版本,不需要加載main挤渐,app圖標(biāo),啟動圖片
- 啟動圖片:模擬器和真機(jī)的尺寸由啟動圖片決定双絮,XCode6之后蘋果提供啟動的xib浴麻,啟動xib的原理就是蘋果把xib上面的內(nèi)容截屏得问,生成一張新的圖片,保存到沙盒的cache中
- 為什么要使用啟動的xib软免?有了它宫纬,就不用關(guān)心有沒有模擬器的啟動圖片,會自動識別模擬器的真實(shí)尺寸膏萧;同事可以展示更多的內(nèi)容漓骚;簡化美工的工作量,只要提供一張拉伸的圖片榛泛,就可以通過自動布局把圖片拉伸蝌蹂。
搭建框架,在程序啟動完成的時候曹锨,創(chuàng)建窗口孤个,設(shè)置窗口的根控制器,顯示窗口
-
自定義TabBar控制器
- 目的:自己的事情自己管理沛简,需要給TabBarVc添加子控制器
- 抽出一個添加所有子控制器的方法齐鲤,這樣做是為了使我們代碼結(jié)構(gòu)更加清晰
- 添加自定義的子控制器,為了使項(xiàng)目結(jié)構(gòu)更加清晰覆享,需要事先劃分好
- 點(diǎn)擊TabBar上的按鈕需要跳轉(zhuǎn)到對應(yīng)的子控制器
- 點(diǎn)擊TabBar上的按鈕佳遂,通知TabBarVc跳轉(zhuǎn)控制器营袜,給TabBarVc傳遞按鈕的角標(biāo)
-
給界面添加導(dǎo)航條
- 既要顯示子控制器的view撒顿,又要顯示導(dǎo)航條,需要把子控制器包裝成導(dǎo)航控制器
- 設(shè)置導(dǎo)航條的背景圖片和導(dǎo)航條上文字內(nèi)容
- 導(dǎo)航條的內(nèi)容一般由棧頂控制器的navagationItem決定荚板,這個模型不能設(shè)置
- 導(dǎo)航條的背景圖片由導(dǎo)航條決定凤壁,通過導(dǎo)航控制器就能拿到導(dǎo)航條
- 設(shè)置導(dǎo)航條的背景圖片一定要在導(dǎo)航條顯示之前設(shè)置才好使
- 可以在第一次初始化導(dǎo)航控制器的時候去設(shè)置,導(dǎo)航條的內(nèi)容由導(dǎo)航控制器管理
- 需要自定義導(dǎo)航控制器跪另,并在initialize方法中獲取當(dāng)前導(dǎo)航控制器類下面所有導(dǎo)航條設(shè)置
- 導(dǎo)航條上的標(biāo)題也需要通過導(dǎo)航條設(shè)置
設(shè)置每一個界面的導(dǎo)航條內(nèi)容拧抖,包括購彩大廳和我的彩票
封裝蒙版和活動菜單
注意:不能把蒙版和活動菜單放到同一個view中,是因?yàn)樾薷母缚丶耐该鞫让饴蹋涌丶耐该鞫纫矔淖?/p>
-
自定義蒙版
- 在.h文件中聲明兩個類方法唧席,分別用來顯示(show)和隱藏(hide)蒙版
- 在顯示蒙版的方法中,需要創(chuàng)建一個自己的對象嘲驾,大小和屏幕尺寸相同淌哟,設(shè)置背景顏色和透明度
- 將蒙版對象添加到主窗口中即可
+ (void)show
{
// 創(chuàng)建蒙版對象
XMGCover *cover = [[XMGCover alloc] initWithFrame:XMGScreenBounds];
cover.backgroundColor = [UIColor blackColor];
cover.alpha = 0.6;
// 把蒙版對象添加主窗口
[XMGKeyWindow addSubview:cover];
}
- 隱藏蒙版
- 因?yàn)殡[藏蒙版的方法是類方法,需要遍歷窗口的子控件
- 如果子控件是當(dāng)前蒙版對象的類型辽故,將其從父控件中移除即可
+ (void)hide
{
for (UIView *childView in XMGKeyWindow.subviews) {
if ([childView isKindOfClass:self]) {
[childView removeFromSuperview];
}
}
}
-
自定義活動菜單(利用xib)
- 在頭文件中聲明一個從xib加載控件的方法徒仓,控件的尺寸默認(rèn)和xib一樣大
- 聲明一個將控件顯示在某個位置的方法
- 聲明一個將控件隱藏在某個位置的方法,并且在隱藏完畢以后提供其他操作的參數(shù)
- 聲明一個代理誊垢,用來監(jiān)聽用戶點(diǎn)擊關(guān)閉按鈕時的事件
注意:修改父類的frame并不會影響里面的子控件掉弛,可以利用自動布局解決子控件隨父控件尺寸的改變而改變
如果修改形變直接縮放為0症见,父控件馬上消失,而不會產(chǎn)生動畫殃饿,所以可以縮放到0.01
自定義菜單
- 自定義控件的時候谋作,首先要考慮外界怎么調(diào)用方便,根據(jù)外界需求乎芳,設(shè)計自定義控件所需要提供的方法
- 需求:自定義菜單要顯示在哪個view上瓷们,要顯示數(shù)據(jù)的模型,以及從哪個位置開始顯示秒咐,最后還有自定義菜單的隱藏
- 拋出異常谬晕,可以方便調(diào)用者知道是否正確使用該方法
NSException *excp = [NSException exceptionWithName:@"items的總數(shù)不符合" reason:@"傳入的數(shù)組總數(shù)必須是3的倍數(shù)" userInfo:nil];
[excp raise]; - 自定義彈簧菜單的步驟:
- 添加所有按鈕并進(jìn)行布局(九宮格布局)
- 添加白色的分割線
- 添加背景為黑色的view
- 開始下移動畫效果
- 再次點(diǎn)擊菜單按鈕的時候開始上移動畫效果
搭建競技場
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//
UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:@[@"足球",@"籃球"]];
seg.width += 40;
// 設(shè)置UISegmentedControl背景圖片
[seg setBackgroundImage:[UIImage imageNamed:@"CPArenaSegmentBG"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[seg setBackgroundImage:[UIImage imageNamed:@"CPArenaSegmentSelectedBG"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
seg.selectedSegmentIndex = 0;
// 0 142 143
// 設(shè)置邊框顏色
seg.tintColor = XMGColor(0, 142, 143);
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
[seg setTitleTextAttributes:dict forState:UIControlStateSelected];
self.navigationItem.titleView = seg;
}