一.主界面橫豎屏效果圖
二.主界面加載,
- 初始化Dock(紅色框的控件),判斷程序啟動時的屏幕方向.調用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改變,將此事件一直傳遞下去
- 程序運行過程中屏幕方向改變會調用- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator;(View將要過度到的尺寸) 方向改變后,同樣要通知Dock,執行Dock的- (void)transitionToLandScape:(BOOL)isLandScape;屏幕方向改變,子控件同樣要修改尺寸
三.Dock的初始化
- Dock中的- (void)transitionToLandScape:(BOOL)isLandScape;方法中不僅要根據屏幕方向判斷自己的尺寸,還要通知自己的子控件屏幕方向改變
- 構造方法內初始化子控件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
四.Dock子控件DockBottomView以及用block實現內部按鈕的點擊
- DockBottomView內部有三個按鈕組成,豎屏時,縱向排列,橫屏時橫向排列
構造方法中添加子控件,
- (void)transitionToLandScape:(BOOL)isLandScape方法中根據屏幕方向布局子控件
- block需要傳遞一個參數(被點擊的按鈕),按鈕的類型(自己定義的枚舉),按鈕中的tag綁定了類型,外界通過判斷按鈕的類型,決定下一步的代碼
- 外界通過判斷按鈕類型執行的代碼
1 // block實現底部按鈕的點擊 2 - (void)blockWithBottomClick 3 { 4 self.dock.bottomView.itemBlock = ^(UIButton *button){ 5 6 switch (button.tag) { 7 case ChaosDockBottomItemTypeMood: 8 { 9 ChaosMoodViewController *moodVC = [[ChaosMoodViewController alloc] init]; 10 11 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:moodVC]; 12 nav.modalPresentationStyle = UIModalPresentationPageSheet; 13 14 nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 15 16 [self presentViewController:nav animated:YES completion:nil]; 17 } 18 break; 19 case ChaosDockBottomItemTypePhoto: 20 { 21 ChaosMoodViewController *moodVC = [[ChaosMoodViewController alloc] init]; 22 23 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:moodVC]; 24 nav.modalPresentationStyle = UIModalPresentationPageSheet; 25 26 nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 27 28 [self presentViewController:nav animated:YES completion:nil]; } 29 break; 30 case ChaosDockBottomItemTypeBlog: 31 { 32 ChaosMoodViewController *moodVC = [[ChaosMoodViewController alloc] init]; 33 34 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:moodVC]; 35 nav.modalPresentationStyle = UIModalPresentationPageSheet; 36 37 nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 38 39 [self presentViewController:nav animated:YES completion:nil]; 40 } 41 break; 42 } 43 }; 44 }
五.Dock中子控件ChaosTabBar,以及代理方法的實現
- 添加子控件,子控件為自定義按鈕,按鈕內部實現下面兩個方法可以實現內部image和title的自定義布局
- 代理的設計,內部需要將上次選中按鈕的index和本次點擊的按鈕的index傳遞出去,方便外界切換對應的控制器或者view
- 外界代理的實現 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
六.Dock中的IconButton(頭像),就一按鈕,直接在外面給按鈕添加點擊事件 ? ? ? ? ? ? ? ? ? ?