启动屏幕的行为与启动图像完全相同

问题描述 投票:25回答:5

In order to get iPad Pro to use full resolution at launch, we have to use a Launch Screen File

我之前从未使用过Launch Screen XIB / Storyboard,因为我的应用程序向后兼容iOS 7.通常我使用LaunchImage asset catalog为每个设备维度和启动方向定义特定的静态图像。

现在我正在尝试定义一个类似于LaunchImage资产目录的启动屏幕文件,但我很难做到这一点。特别是:

1)根据设备的确切尺寸,我没有看到选择不同UIImage的好方法,例如:向iPhone 4S用户显示一个图像,向iPhone 5用户显示另一个图像。

2)我没有办法为iPad Portrait和iPad Landscape视图选择不同的UIImage。大小类似乎认为iPad Portrait和iPad Landscape都是“Regular”宽度和“Regular”高度,因此任何出现在iPad Portrait上的UIImage也会出现在iPad Landscape中。

ios xcode interface-builder
5个回答
4
投票

系统在启动应用程序之前加载启动文件,这会对它可以包含的内容产生一些限制(其中一些可能会强制您回到静态图像文件):

1.应用程序尚未加载,因此视图层次结构不存在,系统无法调用您在应用程序中可能具有的任何自定义视图控制器设置代码(例如viewDidLoad)

2.您只能使用标准的UIKit类,因此您可以使用UIView或UIViewController,但不能使用自定义子类。如果您尝试设置自定义类,您将在Xcode中收到非法配置错误。

3.启动文件只能使用基本的UIKit视图,如UIImageView和UILabel。您不能使用UIWebView。

4.如果您使用的是故事板,则可以指定多个视图控制器,但还有一些限制。例如,您可以在导航或标签栏控制器中嵌入视图控制器,但更复杂的容器类(如UISplitViewController)不起作用(至少尚未使用)。

5.定位启动文件目前似乎没有任何效果。始终使用基本本地化,因此您可能希望避免启动屏幕上的文本。

6.您无法为iPad和iPhone指定不同的启动文件。如果这些设备的界面明显不同,则可能会出现问题,因为只有这么多可以用于自动布局和大小类。

请注意,如果要部署到iOS 7,则仍需要包含静态启动映像文件。您可以包含启动图像文件和静态启动图像。运行iOS 8的iPhone 6等设备将使用启动图像文件,而iOS 7设备将回退到启动图像。


2
投票
  1. 首先创建所有图像。然后,打开资产目录并右键单击 - >应用程序图标和启动图像 - >新的iOS启动映像。这将创建一个文件以将所有文件拖入。去做。将资产命名为“启动”。 enter image description here
  2. 使用command-n创建新的启动屏幕故事板。选择iOS - >用户界面 - >启动屏幕。调用文件“启动屏幕”。
  3. 在Launch Screen故事板中,选择视图控制器的视图

[.

  1. 从右侧ba底部的对象库中找到UIImageView占位符,并将其拖动到启动屏幕视图中。

UIImageView

  1. 现在,在故事板中选择图像视图,然后从资产目录中键入图像的名称。

enter image description here

  1. 控制从UIImageView拖动到它的容器视图以设置自动布局约束,如下所示:

enter image description here

  1. 可选...如果您希望它在故事板中看起来不错,请选择视图并执行选项-cmd- =以更新UIImageView的框架。
  2. 转到info.plist,然后键入“启动屏幕界面文件基本名称”键的故事板名称(“启动屏幕”)
  3. 清洁并运行。

希望有所帮助,我没有忘记任何事情!


2
投票

您可以使用大小类为不同的屏幕尺寸指定不同的图像,但这无助于您处理iPhone 4S和iPhone 5屏幕的情况


0
投票

这是一个可以工作的iPad解决方案,

对于iPhone你可以使用大小类,我不是在这里发布该解决方案。

解决方案是将启动画面图像分解为组件,并使用约束来操纵Portrait与Landscape的图像。

这是我如何做到的一个例子。

为iPad创建一个启动故事板

UILaunchStoryboardName~ipad(UILaunchStoryboardName~iphone)

在我的案例2048x1536中拍摄您的风景图像

我拍摄了风景图像并将其切成三个

  1. 中心1536x1536
  2. 离开256x1536
  3. 右256x1536

在启动故事板上,我使用以下约束创建了3个图像视图

核心:

  • 固定到顶部和底部,
  • 在superview的中心,
  • 保持纵横比

左右片:

  • 0尾随/通往中心,
  • 顶部对齐,
  • 平等高度

然后对于左右视图的模式我将其从纵横填充更改为右下角和左下角(对我来说效果最好)

我知道这对于应该简单的事情来说似乎有些过分。我使用发布故事板而不是发布图像的原因是减少了应用程序的大小。我需要更少的启动图像,我可以使用jpeg而不是png


0
投票

另一种方法是使用间隔视图将正确的图像定位在可见区域中并将另一个移出屏幕(请参阅我对类似问题here的原始答案)。

您无法为不同的屏幕尺寸(iPhone 4,iPhone X,...)提供不同的图像,但如果您想要iPhone和iPad的不同图像以及纵向和横向的不同图像,此解决方案适合您。

如果你想尝试一下,我创建了一个example project on github。它适用于iPad和iPhone。

Constraints in Interface Builder

重要的限制是

PortraitSpacer.width ≤ 5 × view.width
PortraitSpacer.width ≤ 5 × view.height

LandscapeSpacer.width ≥ 5 × view.width
LandscapeSpacer.width ≥ 5 × view.height

PositionSpacer.width = 5 × view.width

其中view.widthview.height是主视图的宽度和高度。

PortraitSpacer将肖像图像定位在5 × min(view.width, view.height)LandscapeSpacer将景观图像定位在5 × max(view.width, view.height)PositionSpacer在纵向模式下具有与PortraitSpacer相同的宽度,并且在横向模式下具有与LandscapeSpacer相同的宽度。

我们将所有内容乘以5,这样两个图像就不会重叠。这适用于满足以下条件的所有设备

5 × min(view.width, view.height) + max(view.width, view.height) ≤ 5 × max(view.width, view.height)

在横向模式中,这意味着

5 / 4 ≤ view.width / view.height

所有现有设备的情况都是如此:iPad的纵横比最低,4:3,仍然大于5:4。

然后,您可以在资产目录中为每台设备(iPhone,iPad)配置图像。

© www.soinside.com 2019 - 2024. All rights reserved.