18

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

Default-Landscape.png Default-Portrait.png

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

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

我的问题是,如果我[[UIDevice currentDevice] orientation]打电话

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

答案始终是设备是纵向的,即使我清楚地把它放在横向上。我在模拟器和设备上也试过这个,行为是一样的。

有谁知道这个或其他一些方法的修复?

谢谢!

4

9 回答 9

5

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

只是为了澄清这是我使用的:

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]];
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
bgView.contentMode = UIViewContentModeTop;
于 2011-08-08T10:08:22.180 回答
3

您可以使用 UIApplication statusBarOrientation 如下:

if ( UIDeviceOrientationIsLandscape( [[UIApplication sharedApplication] statusBarOrientation] ))
    {
    // landscape code
    }
else
    {
    // portrait code
    }
于 2012-11-20T07:00:19.787 回答
3

为了解决这个问题,我在允许两个方向的视图控制器内安装了启动图像视图。尽管设备在启动时报告了错误的方向,但视图控制器似乎得到了正确的方向。

于 2010-08-26T18:24:43.103 回答
1

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

于 2010-08-13T19:38:52.223 回答
1

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

于 2010-08-13T14:38:07.280 回答
1

要在开始时了解视图控制器的方向(UIDevice方向在用户旋转设备之前不起作用)拦截shouldAutorotateToInterfaceOrientation,它在开始时被调用,并且您知道您的设备方向。

于 2011-01-13T00:36:40.487 回答
-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];

注意:您必须对其进行更新以支持高分辨率屏幕。

于 2011-02-22T01:42:04.017 回答
-1

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

于 2010-11-12T01:07:45.573 回答
-2

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

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

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

不过,向 Apple 提交文件可能是一个不错的增强请求 :)

于 2010-08-13T21:01:11.433 回答