iOS启动加载添加广告页面

前言:iOSAPP启动加载时添加广告页面的功能很久之前就存在了,因为现在手上的项目和之前一个项目都没有这一需求,也就没去做。最近发现手机上面的APP几乎八成都用到了启动加载时跳出广告页面,今天上午没什么事就自己写了一个demo出来,代码很简单,在这和大家一起分享参考。


Github:看这里


iOS启动加载添加广告页面_第1张图片

思路整理:

1、向后台请求数据并进行UI展示(忽略)

2、根据后台返回数据判断加载页面

3、进入广告页面

4、返回到主页面

代码实现:

1、在程序加载完成didFinishLaunch中向后台请求数据,如果有广告数据就呈现广告数据,如果没有广告数据直接进入主页面;这一步思路和做法比较简单,我们用imageView直接加载图片进行代替,实际操作时按上面思路做即可。

2、在后台返回广告数据之后,设置rootViewController为广告页面控制器,这里我们再忽略网络请求步骤的情况下直接赋值:

LanuchViewController *vc = [[LanuchViewController alloc]init];

vc.time = 3;

vc.imgUrl = nil;

vc.url = @"http://www.baidu.com";

self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:vc];

3、在广告页面添加背景视图和跳过按钮,并添加相应的监听事件:

/**广告视图

*/

@property (nonatomic, strong) UIImageView *backImageView;

/**定时器

*/

@property (nonatomic, strong) NSTimer *timer;

/**倒计时

*/

@property (nonatomic, assign) NSInteger time;

/**跳过按钮

*/

@property (nonatomic, strong) UIButton *passBtn;

实例化控件,并添加点击事件:

_backImageView = [[UIImageView alloc]initWithFrame:self.view.bounds];

_backImageView.userInteractionEnabled = YES;

_backImageView.backgroundColor = [UIColor grayColor];

[self.view addSubview:_backImageView];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(jumpToWebView)];

[_backImageView addGestureRecognizer:tap];

_passBtn = [MyControl buttonWithFram:CGRectMake(KScreenWidth-80, 30, 60, 30) title:[NSString stringWithFormat:@"跳过%lds",_time] imageName:nil];

_passBtn.backgroundColor = [UIColor whiteColor];

[_passBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[_passBtn addTarget:self action:@selector(jumpToRootViewCtrl) forControlEvents:UIControlEventTouchUpInside];

_passBtn.layer.cornerRadius = 5;

_passBtn.layer.masksToBounds = YES;

[self.view addSubview:_passBtn];

添加定时器

_timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeCutdown) userInfo:nil repeats:YES];

NSRunLoop *loop = [NSRunLoop currentRunLoop];

[loop addTimer:_timer forMode:NSRunLoopCommonModes];


设置倒计时,计时结束是进入主页面

- (void)timeCutdown{

if (self.time > 0) {

[_passBtn setTitle:[NSString stringWithFormat:@"跳过%lds",self.time] forState:UIControlStateNormal];

self.time--;

}else{

[_timer invalidate];

[UIView animateWithDuration:1.5 animations:^{

self.view.alpha = 0;

} completion:^(BOOL finished) {

[UIApplication sharedApplication].keyWindow.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

}];

}

}


跳转到网页时,先将根试图控制器改变为主页面,之后push到网页,不加动画效果,制造视觉假象。

- (void)jumpToWebView{

[_timer invalidate];

LanuchWebViewController *vc = [[LanuchWebViewController alloc]init];

vc.url = self.url;

MainViewController *main = [[MainViewController alloc]init];

[UIApplication sharedApplication].keyWindow.rootViewController = [[UINavigationController alloc]initWithRootViewController:main];

[main.navigationController pushViewController:vc animated:NO];

}

点击跳过按钮,直接进入到主页面。点击跳转或倒计时结束时,给当前视图添加渐变透明的动画效果。

- (void)jumpToRootViewCtrl{

[_timer invalidate];

[UIView animateWithDuration:0.5 animations:^{

self.view.alpha = 0;

} completion:^(BOOL finished) {

[UIApplication sharedApplication].keyWindow.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

}];

}

给广告网页页面添加webView和进度条:

@interface LanuchWebViewController ()@property (nonatomic, strong) WKWebView *webView;

@property (nonatomic, strong) UIProgressView *progressView;

@end

WKWebView有一个estimatedProgress属性,可以获取到当前页面加载进度,我们通过KVO方式来动态获取当前加载进度

[_webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context{

if ([keyPath isEqualToString:@"estimatedProgress"]) {

if ([change[@"new"] floatValue] < [change[@"old"] floatValue]) {

return;

}

[_progressView setProgress:[change[@"new"] floatValue] animated:YES];

if (_progressView.progress == 1.0) {

_progressView.hidden = YES;

[_progressView removeFromSuperview];

}

}

}

你可能感兴趣的:(iOS启动加载添加广告页面)