推出图像的iOS通用应用程序

时间:2013-01-13 12:57:45

标签: ios uiviewcontroller

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

我希望“加载”VC具有与启动相同的bg图像,但是,因为它是一个通用应用程序,我无法设置简单的[UIImage imageNamed:@“Default.png”],因为它可以运行在iPhone或iPad上,如果iPad可以纵向或横向启动(iPhone应用程序始终以纵向方式启动)。

问题是:有一种方法可以知道哪个Default.png已被用作启动图像?它可以是

  • Default.png(@ 2x if retina)
  • Default-Portrait.png(@ 2x if retina)
  • Default-Landscape.png(@ 2x if retina)
  • Default-568h@2x.png

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

谢谢, 最大

2 个答案:

答案 0 :(得分:1)

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

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

默认~iphone.png将加载到iPhone / iPod Touch上,默认~ipo.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"];

在评论中回答你的问题:

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

答案 1 :(得分: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];
}