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

本文详细介绍如何在iOS应用中利用LaunchScreen.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];

}];

转载于:https://www.cnblogs.com/CJH5209/p/6027451.html

### 如何在 iOS 中通过 LaunchScreen.storyboard 配置应用的启动页 #### 创建 LaunchScreen.storyboard 文件 如果项目中尚未存在 `LaunchScreen.storyboard` 文件,则可以通过 Xcode 添加一个新的 Storyboard 文件并命名为 `LaunchScreen.storyboard`。确保该文件被指定为项目的启动屏幕文件,在项目设置中选择目标,进入 **General** -> **App Icons and Launch Images** 下找到 **Launch Screen File** 并将其设置为 `LaunchScreen.storyboard`[^1]。 #### 设计启动页布局 打开 `LaunchScreen.storyboard` 后,可以像设计普通界面一样添加 UI 组件(如 UILabel、UIImageView 等)。需要注意的是,启动页的设计应尽可能简单,避免复杂的动画效果或过多的内容加载,因为这可能会影响用户体验[^2]。 以下是具体操作步骤: - 将所需的 UI 控件拖拽到 storyboard 上。 - 设置控件的位置和大小,并为其绑定约束条件(Constraints),以确保其能在不同设备屏幕上正确显示[^5]。 #### 关联 Assets 资源 对于图片或其他媒体资源,可以在 `Assets.xcassets` 中创建对应的 Image Set 或其他类型的资产集合。随后在 `LaunchScreen.storyboard` 的 ImageView 属性面板中选择相应的资源名称作为图片来源[^3]。 #### 处理兼容性和适配问题 由于 Apple 对于新提交的应用程序强制要求使用 `LaunchScreen.storyboard` 替代传统的静态图片方式,因此开发者需特别注意以下几点以保证最佳体验[^4]: - 测试不同的屏幕比例和分辨率下的表现; - 如果涉及动态数据展示或者网络请求初始化等内容,请勿尝试在此阶段完成此类逻辑处理——仅限静态呈现部分。 ```swift // 示例代码片段:假设需要隐藏某个 label 在特定条件下 override func viewDidLoad() { super.viewDidLoad() let launchLabel = self.view.subviews.first(where: { $0 is UILabel }) as? UILabel if let unwrappedLabel = launchLabel, unwrappedLabel.text == "Sample Text" { unwrappedLabel.isHidden = true } } ``` 上述 Swift 代码展示了如何访问由 Launch Screen 加载后的首个子视图中的标签组件实例,并基于一定判断改变它的可见状态属性值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值