一、准备工作
1、添加一个LaunchImage,添加常用手机尺寸启动图片,并配置Target如图:
![](https://img.haomeiwen.com/i1859446/903b3649e72f7289.png)
![](https://img.haomeiwen.com/i1859446/9b8c1ad64a1afd05.png)
二、撸代码
1、添加一个AppDelegate的分类
![](https://img.haomeiwen.com/i1859446/cae0906495a5bab8.png)
2、在AppDelegate中导入这个分类
#import "AppDelegate.h"
#import "ViewController.h"
#import "AppDelegate+LanuchAD.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ViewController *vc = [[ViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
//广告
[self setupLaunchImage];
return YES;
}
3、 广告[self setupLaunchImage]
//
// AppDelegate+LanuchAD.m
// 自定义启动图广告
//
// Created by haozp on 2016/12/17.
// Copyright © 2016年 haozp. All rights reserved.
//
#import "AppDelegate+LanuchAD.h"
#import "DisplayADView.h"
static NSString * const imageUrlString = @"http://img04.tooopen.com/images/20130813/tooopen_15525804.jpg";
@implementation AppDelegate (LanuchAD)
- (void)setupLaunchImage{
[self showADImage1];
}
//利用SDWebImage加载图片
- (void)showADImage1{
//获取网络图片可以用SDWebImage 来添加缓存
NSURL *url = [NSURL URLWithString:imageUrlString];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:url]];
DisplayADView *displayADView = [[DisplayADView alloc] initWithImage:image andFrame:self.window.bounds];
//[UIApplication sharedApplication].keyWindow
[self.window addSubview:displayADView];
}
//利用本地缓存加载图片
- (void)showADImage2{
if([self checkIfImageExist]){
//显示本地图片
UIImage *image = [UIImage imageWithContentsOfFile:[self getLanuchImagePath]];
DisplayADView *displayADView = [[DisplayADView alloc] initWithImage:image andFrame:self.window.bounds];
//[UIApplication sharedApplication].keyWindow
[self.window addSubview:displayADView];
}else{
[self getRemoteImage];
}
}
//判断图片是否存在
- (BOOL)checkIfImageExist{
return [[NSFileManager defaultManager] fileExistsAtPath:[self getLanuchImagePath]];
}
//获取网络图片
- (void)getRemoteImage{
NSURL *url = [NSURL URLWithString:imageUrlString];
NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if(error){
NSLog(@"error = %@",error.localizedDescription);
}else{
if([data writeToFile:[self getLanuchImagePath] atomically:YES]){
NSLog(@"图片已经保存到本地!");
}
}
}];
[dataTask resume];
}
//获取图片所在地址
- (NSString *)getLanuchImagePath{
NSArray *cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = cachePaths[0];
NSString *imagePath = [cachePath stringByAppendingPathComponent:@"launchImage.png"];
return imagePath;
}
@end
3、DisplayADView
//
// DisplayADView.m
// 自定义启动图广告
//
// Created by haozp on 2016/12/17.
// Copyright © 2016年 haozp. All rights reserved.
//
#import "DisplayADView.h"
@interface DisplayADView ()
@property (nonatomic,strong)NSTimer *timer;
@property (nonatomic,assign)int leftTime;
@property (nonatomic, strong) UIButton *skipButton;
@end
@implementation DisplayADView
- (instancetype)initWithImage:(UIImage *)image andFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
NSDictionary *infoDict = [NSBundle mainBundle].infoDictionary;
NSLog(@"=%@",infoDict);
//拿到启动图数组
NSArray *launchImages = [infoDict objectForKey:@"UILaunchImages"];
for (NSDictionary *imageDict in launchImages) {
NSString *imageSizeStr = [imageDict objectForKey:@"UILaunchImageSize"];
CGSize imageSize = CGSizeFromString(imageSizeStr);
if (CGSizeEqualToSize(imageSize, [UIScreen mainScreen].bounds.size)) {
NSString *imageName = [imageDict objectForKey:@"UILaunchImageName"];
UIImage *image = [UIImage imageNamed:imageName];
UIColor *bgcolor = [UIColor colorWithPatternImage:image];
self.backgroundColor = bgcolor;
// self.backgroundColor = [UIColor redColor];
}
}
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), 5*CGRectGetHeight(self.bounds)/6.0)];
imageView.image = image;
[self addSubview:imageView];
//添加一个点击手势,点击跳广告详情页面
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGRAction)];
[imageView addGestureRecognizer:tapGR];
imageView.userInteractionEnabled = YES;
//倒计时
_leftTime = 10;
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
//按钮
CGFloat buttonWidth = 50;
UIButton *skipButton = [[UIButton alloc]initWithFrame:CGRectMake(CGRectGetWidth(self.bounds)-80, 60, buttonWidth, buttonWidth)];
self.skipButton = skipButton;
skipButton.layer.cornerRadius = buttonWidth/2.0;
skipButton.layer.masksToBounds = YES;
skipButton.backgroundColor = [UIColor yellowColor];
skipButton.titleLabel.numberOfLines = 2;
skipButton.titleLabel.textAlignment = 1;
[skipButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[skipButton addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchUpInside];
[skipButton setTitle:@"10s\n跳过" forState:UIControlStateNormal];
skipButton.titleLabel.font = [UIFont systemFontOfSize:13];
[self addSubview:skipButton];
//倒计时动画***
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
//画个圆
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(buttonWidth/2, buttonWidth/2) radius:buttonWidth/2 startAngle:0 endAngle:2 * M_PI clockwise:YES];
shapeLayer.path = path.CGPath;
shapeLayer.lineWidth = 4;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.fillColor = [UIColor lightGrayColor].CGColor;
//线路动画
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeStart"];
animation.fromValue = @0;
animation.toValue = @1;
animation.duration = _leftTime;
[shapeLayer addAnimation:animation forKey:nil];
[skipButton.layer insertSublayer:shapeLayer atIndex:0];
}
return self;
}
- (void)timerAction{
_leftTime --;
if (_leftTime == 0) {
[self dismiss];
}
[self.skipButton setTitle:[NSString stringWithFormat:@"%ds\n跳过",_leftTime] forState:UIControlStateNormal];
}
- (void)dismiss{
[self removeFromSuperview];
[self.timer invalidate];
}
- (void)tapGRAction{
[self dismiss];
[[NSNotificationCenter defaultCenter] postNotificationName:@"skipToAD" object:nil];
}
@end
4、ViewControllert
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"首页";
self.view.backgroundColor = [UIColor whiteColor];
//跳转广告的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(skipToAD) name:@"skipToAD" object:nil];
}
- (void)skipToAD{
ADViewController *adVC = [[ADViewController alloc] init];
[self.navigationController pushViewController:adVC animated:YES];
}
效果图
![](https://img.haomeiwen.com/i1859446/325be38784f3cc04.png)
上述代码可以到我的GitHub中下载
网友评论