如何检测iPad上启动画面动画的应用启动方向!

时间:2010-08-13 14:05:08

标签: iphone uikit uiinterfaceorientation uidevice device-orientation

您好我有一个应用程序,我有两个* .pngs用于默认启动画面:

默认-Landscape.png 默认-Portrait.png

我想要的是在我的应用程序加载并准备就绪时为此默认启动画面设置动画。

为了达到这个目的,我通常会使用默认横向或默认纵向(取决于设备方向)呈现UIImageView,将其保留在屏幕上一段时间,然后将其设置为动画。

我的问题是,如果我在

中拨打[[UIDevice currentDevice] orientation]
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

答案始终是设备处于纵向方向,即使我清楚地将其置于风景中。我在模拟器和设备上尝试了这个,行为是一样的。

有没有人知道这方面或其他方法的解决办法?

谢谢!

9 个答案:

答案 0 :(得分:5)

我遇到了麻烦,我通过制作一个图像1024x1024并将UIImageView的contentMode设置为UIViewContentModeTop然后使用左右边距自动调整来解决它。只要你的肖像和风景默认图像是相同的布局,那么这将工作正常。

这里只是澄清一下我用过的东西:

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]];
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
bgView.contentMode = UIViewContentModeTop;

答案 1 :(得分:3)

为了解决这个问题,我在一个允许两个方向的视图控制器中安装了启动图像视图。即使设备在启动时报告了错误的方向,视图控制器似乎也是正确的。

答案 2 :(得分:3)

您可以按如下方式使用UIApplication statusBarOrientation:

if ( UIDeviceOrientationIsLandscape( [[UIApplication sharedApplication] statusBarOrientation] ))
    {
    // landscape code
    }
else
    {
    // portrait code
    }

答案 3 :(得分:1)

也许你可以在开始时显示带有黑色背景的空白视图,并将[[UIDevice currentDevice] orientation]放入此视图的viewDidAppear并从那里开始启动画面?

答案 4 :(得分:1)

另一种解决方案是读取加速度计数据并自行确定方向。

答案 5 :(得分:1)

一开始就知道方向是什么(UIDevice方向在用户旋转设备之前不起作用)拦截视图控制器的shouldAutorotateToInterfaceOrientation,它会在开始时调用,你知道你的设备方向。

答案 6 :(得分:-1)

在用户控制您的应用之前,您肯定有时想要从加载图片转换为其他图像。除非你的应用程序非常简单,否则从加载图像到登陆页面可能是不够的,如果不让应用程序体验真的很糟糕。如果您开发了一个大型应用程序,您肯定希望这样做以在安装过程中显示进度,加载xib等。如果一个应用程序需要几秒钟准备而没有反馈,用户会讨厌它。 IMO,一个很好的过渡效果也没有错。几乎 nobody 使用加载屏幕,就像Apple建议的那样。我不知道你看到哪些应用显示了他们建议的“空UI”类型加载屏幕。哎呀,即使是苹果公司也没有这样做,除非他们的示例代码中没有我的客户会发现这是可以接受的。这是一个蹩脚的设计。

答案 7 :(得分:-1)

操作系统仅旋转添加到窗口的第一个视图。因此,如果您希望自动旋转屏幕并且您的主视图可以旋转,那么只需将其添加为该视图的子视图。

以下是淡出相应闪屏图像的代码:

    // Determine which launch image file
NSString * launchImageName = @"Default.png";
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
        launchImageName = @"Default-Portrait.png";
    } else {
        launchImageName = @"Default-Landscape.png";
    }
}

// Create a fade out effect
UIImageView* whiteoutView = [[[UIImageView alloc] initWithFrame:self.window.frame] autorelease];
whiteoutView.autoresizingMask = UIViewAutoresizingFlexibleWidth  | UIViewAutoresizingFlexibleHeight;
whiteoutView.autoresizesSubviews = YES;         
whiteoutView.image = [UIImage imageNamed:launchImageName];
[[[self.window subviews] objectAtIndex:0] addSubview:whiteoutView];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
whiteoutView.alpha = 0.0;
[UIView commitAnimations];

注意:您必须更新它以支持高分辨率屏幕。

答案 8 :(得分:-2)

听起来你没有按照Apple iOS HIG推荐的方式使用启动图像。它特别指出,您不应将其用作启动画面,而应将其用作实际UI的骨架版本。实际效果是,您的应用似乎准备得更快。

在应用程序在viewDidAppear或类似设备中启动后,您可以自己绘制启动画面的建议也缺少启动图像的基本用途。这不是一个闪屏。如果您的应用已准备好,请让用户与之互动,不要浪费时间绘制闪屏。

在我对Apple应用程序和第三方应用程序的五分钟调查中,每个人都展示了一个纵向启动图像,加载了UI的纵向版本,然后旋转到横向。自从在iOS上编程以来已经有一段时间了,但我认为这反映了方法调用的顺序 - 首先启动应用程序,然后告诉它旋转到特定方向。

通过以下方式提交Apple可能是一个很好的增强请求:)