美文网首页程序员iOS DeveloperIOS
自定义一个简单易用的广告启动页面

自定义一个简单易用的广告启动页面

作者: 子疯zp | 来源:发表于2017-04-10 18:01 被阅读846次

一、准备工作

1、添加一个LaunchImage,添加常用手机尺寸启动图片,并配置Target如图:

配置

二、撸代码

1、添加一个AppDelegate的分类

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];
}

效果图

效果图.png

上述代码可以到我的GitHub中下载

相关文章

网友评论

    本文标题:自定义一个简单易用的广告启动页面

    本文链接:https://www.haomeiwen.com/subject/tdqeattx.html