繁体   English   中英

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

[英]How do I detect orientation on app launch for splash screen animation on iPad!

嗨,我有一个应用程序,我有两个* .pngs默认闪屏:

Default-Landscape.png Default-Portrait.png

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

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

我的问题是,如果我调用[[UIDevice currentDevice] orientation]

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

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

有没有人知道这个或其他方法的解决方案?

谢谢!

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

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

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

您可以使用UIApplication statusBarOrientation,如下所示:

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

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

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

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

要知道开始时的方向是什么( UIDevice方向在用户旋转设备之前不起作用)截取应该是View Controller的shouldAutorotateToInterfaceOrientation ,它在开始时被调用,你知道你的设备方向。

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

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

这是我淡出适当的初始屏幕图像的代码:

    // 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];

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

听起来你并没有像Apple推荐的iOS HIG那样使用启动图像。 它特别指出,您不应将其用作启动画面,而应将其用作实际UI的骨架版本。 最终效果是您的应用程序看起来准备得更快。

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

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

提交Apple可能是一个很好的增强请求:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM