美文网首页iOS开发新发现
ios App启动加载广告页面思路

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

作者: 流年啊奈我何 | 来源:发表于2017-04-19 14:28 被阅读82次

    思路:

    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启动加载广告页面思路

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