自适应启动屏幕故事板:有没有办法区分iPad方向?
我正在调查使用故事板为我的应用程序启动图像。 该应用程序始终使用大型照片作为启动图像,该照片也用作第一个视图的背景。 但是,当应用程序在iPad上以横向方式启动时,图像会有所不同。
那么在使用自适应故事板作为发布屏幕时,有没有办法区分纵向iPad和横向iPad? 因为它是一个启动屏幕,我不能运行任何代码,它必须完全通过故事板完成。
Apple最近鼓励你不要在设备方向方面考虑旋转,而是像动画边界一样改变(有时带有语义提示)。
我们看到了为什么iPhone 6 Plus – 曾经是“手机,肖像”的界面在某些手机上成为横向界面。
视图控制器对设备及其方向的假设越多,就越难适应新设备,这些设备提供了重用视图控制器的新方法。
此外, UIDeviceOrientation
与UIInterfaceOrientation
。 如果您使用前者做出UI决策,当设备面朝上或面朝下时,您将受到阻碍,并且(IIRC)当您的应用不尊重Orientation Lock时,您的用户会感到沮丧。
那么风景画和人像iPad有什么区别? 两者都是正则x常规的特征……但是一个人的边界比他们的宽度更高,反之亦然。 根据宽高比制作高级布局决策是完全可以的(并且使用自动布局来获取详细信息)。
实际上,您LaunchScreen.storyboard
使用Xcode8
从LaunchScreen.storyboard
内部指定不同的启动屏幕图像。 在针对运行iOS8
及更高版本的设备时,使用LaunchScreen.storyboard
是指定启动屏幕的首选方式。
以下是如何为支持横向启动屏幕的设备指定横向图像的快速分步示例:
- 首先将您的“启动画面”图像添加到项目
Assets.xcassets
。 您应该只需要两个单独的Image Sets
:一个用于portrait
,一个用于landscape
。 将它们命名为splash
(这是肖像图像集)和splash-landscape
(这是横向图像)。 - 现在,您在项目
assets
拥有了图像,转到LaunchScreen.storyboard
文件。 (我假设您已经使用图像设置了启动屏幕视图控制器,并在LaunchScreen.storyboard
设置了约束。) - 选择启动屏幕的
viewcontroller
的ImageView
。 - 转到
ImageView
的Assets Inspector
。 - 将“splash”图像添加到“
Image
源”字段。 这是您的肖像图像源。 - 单击您在步骤5中设置的
Image
源字段旁边的+
按钮。 - 从现在显示的弹出窗口中,为“
Width
和“Height
选择器选择“Regular
”。 这是为横向的iPad指定一个新的自适应集。 将出现一个新的图像源字段,标题为wR hR
。 将“splash-landscape”图像添加到wR hR Image
源字段,以便storyboard
知道在横向时使用不同的图像。 - 现在我们需要在横向时添加对“iphone plus”设备的支持。 因此,再次单击“
Image
源”字段旁边的+
按钮。 - 这次选择
compact
的height
和regular
的width
选择器。 这是为landscape
“iPhone plus”设备指定一个新的自适应设置。 将出现一个新的图像源字段,标题为wR hC
。 - 将“splash-landscape”图像添加到
wR hC Image
源字段,以便storyboard
知道在“iphone plus设备”中使用横向时使用不同的图像。
通过执行这些步骤,您不必编写任何代码,做任何奇怪的事情,也不必依赖旧的launchScreen image sets
。 LaunchScreen.storyboard
将为您处理一切! 它非常整洁。
有关Size Classes和Interface Builder的更多信息,请查看以下精彩文章: https : //medium.com/@craiggrummitt/size-classes-in-interface-builder-in-xcode-8-74f20a541195
编辑:这只是一个简短的人为例子,我认为我使用单独的图像集,自适应集和约束来使SplashScreen图像工作。 为了让它发挥作用(几乎整晚,然后一些),花了很多时间。 很难通过一步一步的post解释Interface Builder
及其所有不同方面。 因此,请使用此答案和示例作为指导,以达到您需要的位置。 此外,上面的链接非常有用。 另外,谁知道,也许我错了或误解了什么……
希望有人会觉得这很有帮助。
设备方向非常简单,可以即时检查,还可以接收方向更改通知。
(这里的所有内容都在Objective-C中)
转到您的App Delegate,并在您的applicationDidFinishLaunchingMethod中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // //then call this, what we're telling the device is, "Hey, let me know when you change orientations!" [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; //Not done yet, now we have to register a method to call on the notification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil]; }
现在,您需要定义设备定向时调用的方法。
所以,你的app代理中的某个地方……
- (void) deviceOrientationDidChange { UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; if (orientation == UIDeviceOrientationPortrait) { //do something if portrait } else { //do another thing if landscape } }
这就是它的全部内容。 然后,您可以使用该方法更改背景图像!
我几年没有重新审视这个问题,但我确信答案是否定的,你无法在发布屏幕故事板中区分iPad方向。
这里的其他答案解决了如何区分代码中的方向,但您无法为启动屏幕故事板运行任何代码。