先上图:

实现思路:
实例化view 添加到 window上,在 view上添加广告图片,跳过按钮,再做它们的相应的点击事件处理,需要引入第三方库 SDWebImage, 切记.
妥啦,就是这么简单.来上代码.
调用代码 (三行搞定) AppDelegate.m
//// AppDelegate.m// ADLaunchImage//// Created by HMC on 16/10/17.// Copyright © 2016年 SKing. All rights reserved.//#import "AppDelegate.h"#import "ADView.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {//网络测试NSString * imageURL = @"http://www.uisheji.com/forum.php?mod=attachment&aid=MTA5ODF8NGU1NzM3MDJ8MTQ3NjcyMTQ3MHwwfDU1NzA%3D&noupdate=yes¬humb=yes";//本地测试NSString * imageURL1 = @"AD.png";//本地gif测试NSString * imageURL2 = @"ad.gif";ADView * adView = [[ADView alloc] initWithWindow:self.window sizeOfADImage:1.7 showTime:6 adImageURL:imageURL];adView.adImageClickedBlock = ^(NSInteger num){NSLog(@"在这里执行点击图片的操作,类型参数为:%ld",(long)num);};return YES;}
自定义 view代码.h
//// ADView.h// ADLaunchImage//// Created by HMC on 16/10/17.// Copyright © 2016年 SKing. All rights reserved.//#import <UIKit/UIKit.h>#define screenWidth [[UIScreen mainScreen] bounds].size.width#define screenHeight [[UIScreen mainScreen] bounds].size.height@interface ADView : UIView//点击图片的 block@property (nonatomic, copy) void(^adImageClickedBlock)(NSInteger num);/**初始化对象@param window window 窗口@param percentOfAdImage 广告图片大小(0 - 1)@param interval 广告图片展示时长@param imageURL 广告图片的 URL(网络) 或者 图片名字(本地)@return self*/-(instancetype)initWithWindow:(UIWindow *)window sizeOfADImage:(CGFloat)percentOfAdImage showTime:(NSInteger)interval adImageURL:(NSString *)imageURL;@end
.m
//// ADView.m// ADLaunchImage//// Created by HMC on 16/10/17.// Copyright © 2016年 SKing. All rights reserved.//#import "SADView.h"#import "UIImageView+WebCache.h"#import "UIImage+GIF.h"@interface SADView()@property (nonatomic, strong) NSTimer * timerOfShowAD;//广告图片@property (nonatomic, strong) UIImageView * adImage;//跳过按钮@property (nonatomic, strong) UIButton * skipButton;//广告图片的 URL@property (nonatomic, copy) NSString * imageURL;//本地广告图片名字@property (nonatomic, copy) NSString * localADImage;//广告图片的大小@property (nonatomic, assign)CGFloat percentOfAdImage;//显示时长@property (nonatomic, assign)NSInteger showTime;@end@implementation SADView-(instancetype)initWithWindow:(UIWindow *)window sizeOfADImage:(CGFloat)percentOfAdImage showTime:(NSInteger)interval adImageURL:(NSString *)imageURL{self.localADImage = @"AD.png";_percentOfAdImage = percentOfAdImage;self.showTime = interval;self.imageURL = imageURL;if (self = [super init]) {//活动窗口[window makeKeyAndVisible];CGSize screenSize = window.bounds.size;//设置启动图片NSString * launchImageName = nil;//设置竖屏NSString * screenDirection = @"Portrait";NSArray * launchImagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];for (NSDictionary * dict in launchImagesDict) {NSString * imageDiretion = dict[@"UILaunchImageOrientation"];CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);if (CGSizeEqualToSize(screenSize, imageSize) && [screenDirection isEqualToString:imageDiretion]) {launchImageName = dict[@"UILaunchImageName"];}}//设置 self 的参数self.frame = window.bounds;self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:launchImageName]];[self.adImage addSubview:self.skipButton];[self addSubview:self.adImage];[window addSubview:self];}return self;}#pragma mark - 按宽度 等比例缩放 注意:借用网上算法优化- (UIImage *)imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth {UIImage *newImage = nil;CGSize imageSize = sourceImage.size;CGFloat width = imageSize.width;CGFloat height = imageSize.height;CGFloat targetWidth = defineWidth;CGFloat targetHeight = targetWidth * height / width ;CGSize size = CGSizeMake(targetWidth, targetHeight);CGFloat scaleFactor = 0.0;CGFloat scaledWidth = targetWidth;CGFloat scaledHeight = targetHeight;CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);if(!CGSizeEqualToSize(imageSize, size)){CGFloat widthFactor = targetWidth / width;CGFloat heightFactor = targetHeight / height;scaleFactor = widthFactor > heightFactor? widthFactor :heightFactor;scaledWidth = width * scaleFactor;scaledHeight = height * scaleFactor;if(widthFactor > heightFactor){thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;}else if(widthFactor < heightFactor){thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;}}//重绘UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);CGRect thumbnailRect = CGRectZero;thumbnailRect.origin = thumbnailPoint;thumbnailRect.size.width = scaledWidth;thumbnailRect.size.height = scaledHeight;[sourceImage drawInRect:thumbnailRect];newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;}-(UIImageView *)adImage{if (!_adImage) {_adImage = [UIImageView new];_adImage.contentMode = UIViewContentModeScaleAspectFit;_adImage.userInteractionEnabled = YES;if (_percentOfAdImage <= 1 && _percentOfAdImage > 0) {_adImage.frame = CGRectMake(0, 0, screenWidth, screenHeight * _percentOfAdImage);}else{_adImage.frame = CGRectMake(0, 0, screenWidth, screenHeight);}UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAD:)];[_adImage addGestureRecognizer:tap];CABasicAnimation * ani = [CABasicAnimation animationWithKeyPath:@"opacity"];ani.duration = 1.0;ani.fromValue = [NSNumber numberWithFloat:0.0];ani.toValue = [NSNumber numberWithFloat:1.0];ani.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];[_adImage.layer addAnimation:ani forKey:@"animateOpacity"];}return _adImage;}-(UIButton *)skipButton{if (!_skipButton) {_skipButton = [UIButton buttonWithType:UIButtonTypeCustom];_skipButton.frame = CGRectMake(screenWidth- 85, 35, 65, 35);_skipButton.backgroundColor = [UIColor grayColor];_skipButton.titleLabel.textColor = [UIColor whiteColor];_skipButton.titleLabel.font = [UIFont systemFontOfSize:14.0];_skipButton.layer.masksToBounds = YES;_skipButton.layer.cornerRadius = 5.0;[_skipButton setTitle:[NSString stringWithFormat:@"跳过"] forState:UIControlStateNormal];[_skipButton addTarget:self action:@selector(skipAD:) forControlEvents:UIControlEventTouchUpInside];}return _skipButton;}-(void)setImageURL:(NSString *)imageURL{_imageURL = imageURL;if (imageURL) {[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:imageURL] options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {if (image) {[self.adImage setImage:[self imageCompressForWidth:image targetWidth:screenWidth]];}else{if ([_imageURL rangeOfString:@".gif"].length) {NSData * gifImageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:_imageURL ofType:nil]];self.adImage.image = [UIImage sd_animatedGIFWithData:gifImageData];}else{[self.adImage setImage: [self imageCompressForWidth:[UIImage imageNamed:_imageURL] targetWidth:screenWidth]];}}}];}//设置广告图片的定时器_timerOfShowAD = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(closeAD) userInfo:nil repeats:YES];}//跳过广告-(void)skipAD:(UIButton *)btn{NSLog(@"跳过广告");[self closeADView];}//点击广告-(void)tapAD:(UITapGestureRecognizer *)tapGestureRecognizer{NSLog(@"打开广告");if (self.adImageClickedBlock) {self.adImageClickedBlock(1);}}//关闭广告-(void)closeAD{if (self.showTime == 0) {NSLog(@"时间到,关闭广告");[self closeADView];}else{[self.skipButton setTitle:[NSString stringWithFormat:@"跳过(%@)", @(self.showTime--)] forState:UIControlStateNormal];}}//关闭动画-(void)closeADView{[UIView animateWithDuration:1.0 animations:^{self.alpha = 0.0;} completion:^(BOOL finished) {if (finished) {[_timerOfShowAD invalidate];_timerOfShowAD = nil;[self removeFromSuperview];}}];}@end
加载 gif 的效果

代码地址: 点这里
