0

我正在编写一个支持旋转的通用应用程序。当应用程序启动时,它需要从互联网下载一些数据,所以我推送一个带有活动指示器的 UIViewController,因为它不可能有动画启动图像或添加标签或对象。

我希望“正在加载”的 VC 具有与启动相同的 bg 图像,但是,因为它是一个通用应用程序,我不能设置一个简单的 [UIImage imageNamed:@"Default.png"] 因为它可以在 iPhone 或iPad 以及 iPad 是否可以纵向或横向启动(iPhone 应用程序始终以纵向启动)。

问题是:有办法知道哪个 Default.png 已用作启动图像?有可能

  • Default.png (@2x 如果视网膜)
  • Default-Portrait.png (@2x 如果视网膜)
  • Default-Landscape.png (@2x 如果视网膜)
  • 默认-568h@2x.png

如果现在有办法,我将检查 currentDevice 和方向并手动设置 imageNamed。

谢谢,马克斯

4

2 回答 2

1

纵向和横向没有后缀。您必须使用 手动检查方向[[UIDevice currentDevice] orientation]

要为 iPad 和 iPhone/iPod Touch 显示不同的图像,您可以添加~ipad到 iPad 图像~iphone的末尾和 iPhone/iPod Touch 图像的末尾。例子:

Default~iphone.png 将在 iPhone/iPod Touch 上加载,而 Default~ipad.png 将在 iPad 上加载:

[UIImage imageNamed:@"Default.png"];

不过,iPhone 5 也没有说明符。因此,您必须检查并再次手动[[UIScreen mainScreen] bounds].size.height加载。UIImage


完整(未经测试)示例:

UIImage *image;

if ([UIScreen mainScreen].bounds.size.height == 568.0)
{
    if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
    {
        image = [UIImage imageNamed:@"Default-568h-Landscape"];
    }
    else
    {
        image = [UIImage imageNamed:@"Default-568h-Portrait"];
    }
}
else
{
    if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
    {
        image = [UIImage imageNamed:@"Default-Landscape"];
    }
    else
    {
        image = [UIImage imageNamed:@"Default-Portrait"];
    }
}
// check suggested by Guy Kogus
if (image == nil) image = [UIImage imageNamed:@"Default"];

要在评论中回答您的问题:

不,您无法查询运行时使用的启动图像。

于 2013-01-13T13:03:54.320 回答
0

@2x 后缀是自动选择的,因此您无需担心。您需要实施一些检查:

- (NSString *)defaultImage
{
    NSString *imageName = nil;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        if ([UIScreen mainScreen].bounds.size.height == 568.0)
        {
            imageName = @"Default-568h";
        }
        else
        {
            imageName = @"Default";
        }
    }
    else // ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation))
        {
            imageName = @"Default-Landscape";
        }
        else // if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation))
        {
            imageName = @"Default-Portrait";
        }
    }
    return [UIImage imageNamed:imageName];
}
于 2013-01-13T13:07:10.853 回答