*近项目在做的广告sdk,刚好自己需要去了解这个实现启动图加载广告这个功能,大家应该都了解,之前Xcode 6是LaunchScreen.xib来当作启动视图,不过到了Xcode 7就变成了Launch Screen.storyboard,其实这两个没有多大的区别,以下我就采用Xcode 7提供的LaunchScreen.storyboard 来实现这个功能,现在把自己经验和代码分享出来。

主要思路

获取Launch Screen.storyboard

通过使用storyborardID去获取启动视图viewcontroller

获取启动viewController的视图view

之后把视图view添加到window中

*后就是新建一个图片贴在视图view中

做个定时触发处理

废话不多说啦,直接贴代码出来:

AppDelegate.m中的代码

//获取LaunchScreen.storyborad

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@”Launch Screen” bundle:nil];

//通过使用storyborardID去获取启动页viewcontroller

UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@”LaunchScreen”];

//获取viewController的视图

self.view = viewController.view;

//把视图添加到window

[self.window addSubview:self.view];

self.launchView = [[UIImageView alloc] initWithFrame:self.window.frame];

[self.launchView setImage:[UIImage imageNamed:@”launch.jpg”]];//这边图片可以做网络请求加载图片、视频动画或者其他自定义的引导页

[self.view addSubview:self.launchView];

//将图片视图推送到前面

[self.window bringSubviewToFront:self.launchView];

//设置3秒定时触发

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(colseLaunchScreen) userInfo:nil repeats:NO];

– (void)colseLaunchScreen {

if (self.launchView) {

[self.launchView removeFromSuperview];

self.launchView = nil;

}

if (self.view) {

[self.view removeFromSuperview];

self.view = nil;

}

}

这边也可以结合LaunchImage使用,方式也是差不多,这边就不多讲了

注意有个坑已填平了:之前我用的xcode项目中General中Main Interface 启动项目初始化的主界面storyboard,用以上方法一直看不到加载的广告,后面使用在AppDelegate代码方式去加载storyboard,就可以加载出来了,目前不清楚这个是什么问题,待研究发现,如有发现朋友,方便留言告知下,谢啦(后面经过友友们的指出,发现如果不是用代码加载storyboard,那General->Main Interface->的main.storyboard加载会新建window,跟你之前传入的window不是同一个,这个之前的就被覆盖了,导致看不到广告效果,之后我修改了方案,把window改成用window中viewController中view这要就避免代码加载stroyboard了)

这里注意一下,上面这个使用storyboard启动适用ios8.0以上,但现在应用差不多都是ios7.0起,开发者为了方便适配,大多都采用launchImage启动,这种也可以使用storyboard去获取广告,完全没有问题,但在加载初始化广告肯定会消耗一点点时间这要就会出现短暂storyboard的默认页面,这个可以通过把获取rootview先隐藏,等加载完毕广告再显示出来!这要问题解决了!

如果先获取launchImage的图片可以采用Cherpak Evgeny 分享在stackflow上的一个直接读取NSBundle中的设置 即可获取当前适用的LaunchImage的办法,代码我也贴出来:

CGSize viewSize =self.window.bounds.size;

NSString *viewOrientation =@”Portrait”;//横屏请设置成 @”Landscape”

NSString *launchImage =nil;

NSArray *imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@”UILaunchImages”];

for(NSDictionary* dict in imagesDict) {

CGSize imageSize =CGSizeFromString(dict[@”UILaunchImageSize”]);

if(CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@”UILaunchImageOrientation”]]) {

launchImage = dict[@”UILaunchImageName”];

}

}

UIImageView *launchView = [[UIImageView alloc] initWithImage:[UIImageimageNamed:launchImage]];

launchView.frame=self.window.bounds;

launchView.contentMode=UIViewContentModeScaleAspectFill;

[self.window addSubview:launchView];

[UIView animateWithDuration:2.0f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState

animations:^{

launchView.alpha=0.0f;

launchView.layer.transform=CATransform3DScale(CATransform3DIdentity,1.2,1.2,1);

}

completion:^(BOOL finished) {

[launchView removeFromSuperview];

}];