您的位置:首页 > 移动开发 > IOS开发

IOS学习笔记(5)——启动logo画面的设置

2014-09-17 21:34 459 查看
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、参考资料

/article/2938532.html

http://www.myexception.cn/iphone/752796.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: