iOS开发笔记之十二——启动logo画面的设置

1、需求介绍

      一个正规的手机APP,都会有启动Logo画面,有时候会在启动画面加载一定的广告,例如腾讯新闻、网易新闻;这些APP都会有自己的启动Logo画面。设计一个体检较佳的启动画面往往是开发优秀APP的第一步。

2、启动画面的实现

      一个完成的启动画面应分为两部分,第一部分IOS系统启动,这个启动的画面伴随着APP的启动;第二个画面是APP自定义画面,这个画面往往伴随着APP的数据初始化、登录等APP初始化工作。这时候启动画面可以是Logo画面,也可以加载广告图片。下面分别介绍这两部分的实现。

第一阶段:

      加载时间:这个阶段是系统在加载应用,这个阶段加载的启动画面默认是1秒,如果想要延长这个阶段的时间,可以采取下面方法:

在AppDelegate.m里加入线程延迟

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

{

    [NSThreadsleepForTimeInterval:2];

    ...........

}

     Logo图片的加载:首先需要设置以下选项:

选项设置后,APP就会从资源目录里查找Default.png图片进行加载。针对不同的分辨率,会有不同的图片选择:

iPhone 4 320x480               ------->Default.png

iPhone 4s 640x960             ------->Default@2x.png

iPhone 5/5s 640x1136        -------->Default-568h@2x.png

IPAD对应不同的Iphone手机。

第二阶段:

       自定义启动画面一般是在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中实现。

我们工程项目里在这个方法中开始加载自己的画面LogoViewController,在LogoViewController里面,进行了广告的加载,如果没有广告数据,则继续

默认Logo图片的加载。让第一阶段第二阶段看起来只有一张图片。加载广告时,直接显示广告图片,但是再次加载原来的Logo让这两个阶段无缝结合

有点麻烦。

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

     .........

     LogoViewController* wLogVC = [[LogoViewController alloc] initWithMainWindow:self.window];

     .........

}

在LogoViewController中,需要根据不同的设备加载不同的图片,目前iPhone手机尺寸主要是iPhone 4/4s和Iphone 5/5s,如果不考虑不同的机型以及Retina屏幕问题,会出现Logo图片“闪调”的现象,这样的Logo加载是良好的用户体验无法容忍的。

代码中根据不同的设备进行判断加载不同的Logo图片;

 

   if(wAdsData != nil)
   {
        //加载广告图片

        ......
   }
   else
   {
        if (568 == frameHeight)
        {
            logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-568h@2x.png"]];
        }
        if (480 == frameHeight)
        {
            if (IS_RETINA)
            {
                 logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default@2x.png"]];
            } else
            {
                 logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
            }

        }


        [self addSubview:logoImageView];
    }

其中Retina屏幕的判断:

#define IS_RETINA  ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))

 然而即使这样,仔细的观察还是隐约能够看到两个阶段之间有略微的闪过。

3、参考资料

http://blog.csdn.net/hopedark/article/details/7970309

http://www.myexception.cn/iphone/752796.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值