zoukankan      html  css  js  c++  java
  • iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

    一.主界面横竖屏效果图

    二.主界面加载,

    • 初始化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 }
      View Code

    五.Dock中子控件ChaosTabBar,以及代理方法的实现

    • 添加子控件,子控件为自定义按钮,按钮内部实现下面两个方法可以实现内部image和title的自定义布局
    • 代理的设计,内部需要将上次选中按钮的index和本次点击的按钮的index传递出去,方便外界切换对应的控制器或者view
    • 外界代理的实现                                                                        

    六.Dock中的IconButton(头像),就一按钮,直接在外面给按钮添加点击事件                    

  • 相关阅读:
    Asp.Net页面传值的方法简单总结【原创】
    .Net架构必备工具列表
    .Net架构必备工具列表
    .Net架构必备工具列表
    C#中几种循环语法的比较
    【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)
    【UVA 437】The Tower of Babylon(记忆化搜索写法)
    【uva 1025】A Spy in the Metro
    【codeforces 538E】Demiurges Play Again
    【Codeforces Beta Round #45 D】Permutations
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5563513.html
Copyright © 2011-2022 走看看