启动屏幕 1.0.0

启动屏幕 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布最后发布2014 年 12 月

Mark H. Granoff 维护。



使用方法

要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install

以下是如何将 LaunchScreen 集成到您的应用中的说明。

需求

这个类及相关示例利用了 Xcode 6 使用启动屏幕故事板的能力,而不是使用一套默认图片。它依赖于新的 Info.plist 键 UILaunchStoryboardName

动机

尽管 Apple 建议不要使用除应用初始无内容边框外的所谓“启动画面”,但在应用中显示带有某种图形(可能是动画的)的启动画面是一种常见的做法,通常还会有一些指示正在进行中的活动(例如,一个旋转的活动指示器)。

传统上,要提供任何形式的叠加、长时间显示的启动画面,您必须实例化一个视图,用某种内容填充它,然后将其显示在您的初始视图之上,最后再移除它。这个过程的机制并不复杂,但难点在于您想要填充这个视图的内容不仅仅是一个纯色。这就是为什么会有许多不同版本和大小的“Default.png”(不同设备和屏幕大小的繁琐名称列表)。随着 iPhone 6 和 6+ 的推出,这个噩梦变得更大。

这就是 Xcode 6 中可用的 Launch Screen XIBs 的出现。这些 XIB 允许您布局系统将在加载您的应用时显示的初始屏幕。您可以使用几乎所有 UIKit 元素,包括您想要的活动指示器(尽管您无法以编程的方式控制它),并且可以使用自动布局来排列所有内容。因此,完全消除了对多个“Default”图片的需求。

我们为什么不能以编程方式使用那个 XIB 文件呢?它只是一个包含其他 UIKit 元素的 UIView。而且,没有理由我们不能将其加载并动态地向视图中添加 UIKit 元素。但难题在于,我们不会直接从 XIB 中影响系统显示的内容。相反,我们将实例化 XIB,将其视图插入到我们的故事板中的另一个 UIViewController 的视图中,然后对其进行操作。

使所有屏幕尺寸都能工作的小技巧是(我们假定你在你的Storyboard中使用尺寸类),你必须在你的Storyboard中加入一个类为LaunchScreenViewController的UIViewController。你必须为这个场景分配一个Storyboard标识符。这里有两种初始化方法;第一种假定Storyboard ID为LaunchScreenViewController,第二种则将ID作为参数,如果你愿意使用其他的ID。通过在你的Storyboard中添加一个场景,并使用尺寸类,你可以确保你的Launch Screen XIB视图将按需调整大小以填充屏幕。

安装

集成

一旦安装了LaunchScreen,它的使用就相当简单。

  • 你将需要一个XIB文件用于启动屏幕。

  • 将.h文件添加到适当的位置,以便在需要操作和显示自定义启动画面时使用。

#import "LaunchScreenController.h"
  • 将UIViewController拖拽到你的Storyboard中。

    • 将其类设置为LaunchScreenViewController
    • 将其Storyboard标识符设置为LaunchScreenViewController
  • 实例化一个LaunchScrenViewController

LaunchScreenViewController *launchScreenVC = [[LaunchScreenViewController alloc] initFromStoryboard:self.storyboard];
  • 你可以为渲染的视图拍快照。
UIImage *snapshot = [launchScreenVC snapshot];
  • 你可以在LaunchScreenViewController的视图中添加元素,并将视图插入你的视图层次中。
UIActivityIndicatorView *spinner = ...;
UIView *view = launchScreenVC.view;
[view addSubview:spinner];
...
[self.view addSubview:view];
[UIView animateWithDuration:1.0
                      delay:2.0
                    options:0
                 animations:^{
                    v.alpha = 0.0;
                 } completion:^(BOOL finished) {
                    [v removeFromSuperview];
                 }
];

贡献

按照惯例:Fork,修改,创建pull请求。

作者

Mark H. Granoff ~ @granoff / @hawkimedia

许可证

LaunchScreen遵循MIT许可证。有关更多信息,请参阅LICENSE文件。