• IOS使用Launch Screen.storyboard制作广告启动界面


    最近项目在做的广告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];

    }];

  • 相关阅读:
    php函数名后冒号(:)+数据类型(返回值类型限制/php新特性)
    qBittorrent 任务数
    TDDFT软件 octopus 编译
    visual studio code, latex workshop, setting.json
    Tex插入图片/插入tikz流程图
    记录一下讨厌的东西,就当黑名单了
    安装mingw-w64
    win7 和 win10窗口的小区别
    lattice, reciprocal lattice, OUTCAR
    v_sim 个人用户编译 无root权限
  • 原文地址:https://www.cnblogs.com/CJH5209/p/6027451.html
Copyright © 2020-2023  润新知