专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

适配iOS9.0多任务

启动界面适配

  • 要让程序支持 iOS9.0多任务 需要使用 Launch Screen File 来设置启动界面

    • 创建 Launch Screen.storyboard 并且配置到 Launch Screen File
    • Assets.xcassets 中右击
    • 创建 ImageSet, 命名为 launch_icon, 用于在启动界面显示
    • 创建 ImageSet, 命名为 launch_background, 作为启动界面背景
    • Launch Screen.storyboard 创建2个imageView,用来显示启动图片和背景
    • 启动图片在 iPhoneiPad 上的大小是不一样的. 通过 sizeClass 来配置约束
  • 在代码中和 sizeClass 相关的类有2个 UITraitCollection, UIInterface

  • CZSplitViewController.m 中实现 traitCollectionDidChange 来监听 sizeClass 的改变
  • sizeClassUITraitNameHorizontalSizeClass = Compact 时,显示 iPhone 的样式

    • Main.Storyboard 中给 master 控制器添加一个 Container View, 将 iPhone 上的 UITabbarViewController 嵌入到 Container View
    • 运行,在 UITraitNameHorizontalSizeClass = Compact 时,显示 iPhone 的样式,但是在全屏时 master 控制器显示的还是 tabBar 控制器
    • 新建 CZMenuViewController 继承 UIViewController, 将 Main.storyboardmaster 控制器类型配置为 CZMenuViewController,并将 Container View 连线到 CZMenuViewController
    • CZMenuViewController 定义 showContainerView: 来显示或隐藏iPhone界面的容器视图,并在 .h 文件中公开此方法
        #pragma mark - iPhone 容器视图相关代码
        /**
         *  显示或隐藏iPhone界面的容器视图
         *  @param isShow YES:显示, NO:隐藏
         */
        - (void)showContainerView:(BOOL) isShow {
            self.containerView.hidden = !isShow;
        }
      
    • CZSplitViewControllertraitCollectionDidChange: 方法中调用 showContainerView:

        #pragma mark - sizeClass
        /// 当控制器的sizeClass发生改变的时候调用
        - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
            NSLog(@"traitCollectionDidChange: %@", self.traitCollection);
      
            // 判断是否显示iPhone界面
            BOOL isShow = self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact;
      
            // 获取到 CZMenuViewController
            CZMenuViewController *menuVC = self.viewControllers[0];
      
            // 判断 menuVC 是否真的是 CZMenuViewController 类型
            if (![menuVC isKindOfClass:[CZMenuViewController class]]) {
                return;
            }
      
            // 调用 CZMenuViewController 来显示或隐藏 iPhone 界面
            [menuVC showContainerView:isShow];
        }