ios App启动加载广告页面思路

思路:

1.广告页加载思路。广告页的内容要实时显示,在无网络状态或者网速缓慢的情况下不能延迟加载,或者等到首页出现了再加载广告页。所以这里我不采用网络请求广告接口获取图片地址,然后加载图片的方式,而是先将图片异步下载到本地,并保存图片名,每次打开app时先根据本地存储的图片名查找沙盒中是否存在该图片,如果存在,则显示广告页。

2.广告页的显示代码可以放在AppDeleate中,启动的时候加载在window上。

代码:

//每次启动时更新图片

-(void)updataAdImage{

        NSString *urlString = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1492585475831&di=1187f056c739de81b721ffc23854c9bf&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201605%2F08%2F20160508131028_ZYAnN.jpeg";

        NSData *data = [NSData dataWithContentsOfURL:[NSURL  URLWithString:urlString]];

       UIImage *image = [UIImage imageWithData:data]; // 取得图片

       if (image) {

        // 本地沙盒目录

        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        // 得到本地沙盒中名为"AdImage"的路径,"AdImage"是保存的图片名

       NSString *imageFilePath = [path stringByAppendingPathComponent:@"AdImage"];

        // 将取得的图片写入本地的沙盒中,其中0.5表示压缩比例,1表示不压缩,数值越小压缩比例越大

        BOOL success = [UIImageJPEGRepresentation(image, 1.0) writeToFile:imageFilePath  atomically:YES];

       if (success){

       NSLog(@"写入本地成功");

       }

       }

}

//首次打开app是不用调用广告页的

-(void)setAdPage{

    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSString *imageFilePath = [path stringByAppendingPathComponent:@"AdImage"];

    //判断是否存在这个文件

    NSFileManager *fileManager = [NSFileManager defaultManager];

    BOOL result = [fileManager fileExistsAtPath:imageFilePath];

    if(result){

    AdvertiseView *advertiseView = [[AdvertiseView alloc] initWithFrame:self.window.bounds];

    [advertiseView show];

    }

}

以下是AdvertiseView的.h与.m文件

#import@interface AdvertiseView : UIView

@property(nonatomic,strong)UIImageView *imageView;

@property(nonatomic,strong)UIButton    *countBtn;

-(void)show;

@end

#import "AdvertiseView.h"

@implementation AdvertiseView

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

_imageView=[[UIImageView alloc]initWithFrame:frame];

// 本地沙盒目录

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *imageFilePath = [path stringByAppendingPathComponent:@"AdImage"];

_imageView.image=[[UIImage alloc]initWithContentsOfFile:imageFilePath];

[self addSubview:_imageView];

_countBtn=[[UIButton alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-80, 40, 60, 30)];

_countBtn.backgroundColor=[[UIColor grayColor] colorWithAlphaComponent:0.5];

_countBtn.clipsToBounds=YES;

[_countBtn.titleLabel setFont:[UIFont systemFontOfSize:15]];

_countBtn.layer.cornerRadius=5;

[_countBtn setTitle:[NSString stringWithFormat:@"跳过%d",4] forState:UIControlStateNormal];

[_countBtn addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchUpInside];

[self addSubview:_countBtn];

[self startCoundown];

}

return self;

}

// GCD倒计时

- (void)startCoundown

{

__block int timeout = 4;//倒计时

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);

dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0 * NSEC_PER_SEC, 0); //每秒执行

dispatch_source_set_event_handler(_timer, ^{

if(timeout <= 0){ //倒计时结束,关闭

dispatch_source_cancel(_timer);

dispatch_async(dispatch_get_main_queue(), ^{

[self dismiss];

});

}else{

dispatch_async(dispatch_get_main_queue(), ^{

[_countBtn setTitle:[NSString stringWithFormat:@"跳过%d",timeout] forState:UIControlStateNormal];

timeout--;

});

}

});

dispatch_resume(_timer);

}

-(void)show{

[[UIApplication sharedApplication].keyWindow addSubview:self];

}

-(void)dismiss{

[self removeFromSuperview];

}

@end

你可能感兴趣的:(ios App启动加载广告页面思路)