微博動畫的實(shí)現(xiàn)
-
通過代碼加載storyboard的步驟
- 注意:通過storyboard啟動,根控制器的view并不會在程序啟動完成的時候(調(diào)用didFinishLaunching方法)添加到窗口
- 創(chuàng)建和UIScreen同樣大小的窗口
- 加載storyboard,并創(chuàng)建窗口的根控制器
- 顯示窗口:[self.window makeKeyAndVisible];
- 顯示歡迎界面的view,一定要給界面設(shè)置frame,否則界面不會顯示
- 將歡迎界面的view作為子控件添加到窗口上去
在Main.storyboard對應(yīng)的控制器中初始化模型對象和模型對應(yīng)的控制器,并以modal的形式展示出來
-
為按鈕添加動畫效果的步驟
- 懶加載所有按鈕的數(shù)組itemButtons
- 在viewDidLoad方法中使用setUpAllBtns添加所有item按鈕
- 在setUpAllBtns中根據(jù)按鈕數(shù)組對item按鈕進(jìn)行布局
- 啟動定時器,每隔一段時間讓一個按鈕做物理引擎動畫,也就是消除btn的transform
-
歡迎界面的動畫
- 動畫效果:文字圖片慢慢消失,通過修改alpha值,顯示用戶頭像并添加上移動畫,有彈簧效果,慢慢顯示歡迎回來的文字,通過修改alpha值
- 在didMoveToSuperview方法中添加動畫,當(dāng)一個控件被添加到父控件時就會調(diào)用
-
自定義button
- 以后如果通過代碼設(shè)置子控件的位置,一般都是在layoutSubviews里面去寫
- layoutSubviews什么時候調(diào)用:只要父控件的frame一改變就會調(diào)用layoutSubviews,重新布局子控件
58同城引導(dǎo)頁的動畫
- 核心:添加scrollView的代理,在scrollViewDidScroll方法中根據(jù)偏移量,切換人物的圖片以及旋轉(zhuǎn)小太陽
彩票項(xiàng)目 - 環(huán)境配置
模擬器和真機(jī)的尺寸跟啟動圖片有關(guān)系
-
通過代碼創(chuàng)建窗口并顯示窗口的步驟
- 創(chuàng)建窗口
- 創(chuàng)建窗口的根控制器并添加到窗口
- 顯示窗口
劃分文件結(jié)構(gòu)
注意:UITabBarController控制器的view不是懶加載的,在創(chuàng)建控制器的時候就會加載
彩票項(xiàng)目 - 自定義tabBar控制器
使用items數(shù)組保存所有控制器對應(yīng)按鈕的內(nèi)容(UITabBarItem),并進(jìn)行懶加載
在viewDidLoad方法中添加所有子控制器和自定義的tabBar
添加自定義的TabBar需要移除系統(tǒng)的TabBar,相當(dāng)于把TabBar上所有的按鈕移除,把一個控件移除父控件并不會馬上銷毀,一般是在下一次運(yùn)行循環(huán)的時候,就會判斷這個對象有沒有強(qiáng)引用,如果沒有,才會銷毀
我們自己的TabBar的按鈕也需要模型,UITabBar上的按鈕交給UITabBarItem
項(xiàng)目實(shí)戰(zhàn) - 自定義導(dǎo)航控制器
load方法會在加載類的時候調(diào)用,當(dāng)程序一啟動的時候就會調(diào)用
initialize方法會在當(dāng)前類或者它的子類第一次使用的時候才會調(diào)用,可以在該方法中設(shè)置導(dǎo)航條的內(nèi)容
通過[UINavigationBar apperance]方法獲取當(dāng)前應(yīng)用下所有的導(dǎo)航條
通過[UINavigationBar apperanceWhenContainedIn:]方法獲取哪個類下面的導(dǎo)航條
在TabBar控制器添加子控制器的方法中,把控制器包裝成導(dǎo)航控制器
如果要設(shè)置背景圖片,必須填UIBarMetricsDefault,默認(rèn)導(dǎo)航控制器的子控制器的view尺寸會變化
設(shè)置導(dǎo)航條背景圖片,一定要在導(dǎo)航條顯示之前設(shè)置,需要在initialize方法中設(shè)置導(dǎo)航條的背景圖片
彩票項(xiàng)目 - 設(shè)置導(dǎo)航條內(nèi)容
- 設(shè)置導(dǎo)航條標(biāo)題顏色
// 設(shè)置導(dǎo)航條標(biāo)題顏色
NSMutableDictionary *titleAttr = [NSMutableDictionary dictionary];
titleAttr[NSForegroundColorAttributeName] = [UIColor whiteColor];
titleAttr[NSFontAttributeName] = [UIFont boldSystemFontOfSize:20];
[bar setTitleTextAttributes:titleAttr];
要設(shè)置導(dǎo)航條的內(nèi)容,需要在每個TabBarItem對應(yīng)的控制器中單獨(dú)設(shè)置
購彩大廳導(dǎo)航條的內(nèi)容設(shè)置
// 左邊按鈕
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageWithOriRenderingImage:@"CS50_activity_image"] style:UIBarButtonItemStylePlain target:self action:@selector(active)];
- 我的彩票導(dǎo)航條的內(nèi)容設(shè)置
- (void)setUpNav
{
// 設(shè)置左右兩邊的按鈕
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:@"客服" forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"FBMM_Barbutton"] forState:UIControlStateNormal];
// 自適應(yīng)尺寸
[btn sizeToFit];
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
// 左邊
self.navigationItem.leftBarButtonItem = leftItem;
// 右邊
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageWithOriRenderingImage:@"Mylottery_config"] style:UIBarButtonItemStylePlain target:self action:@selector(settting)];
}
- 注意:導(dǎo)航條的標(biāo)題可以封裝到TabBarItem中,因?yàn)槊恳粋€TabBarItem對應(yīng)一個控制器