网上很多的实现方法很多都是显示第一次的缓存的图片,这样就造成后台更新广告图片App不能实时展示的问题。

我的具体实现思路是: 1.启动时先获取启动页的图片全屏展示。 2.设计一个等待时间,如果超过等待时间还没拿到图片就把获取的启动页去掉,否则就显示广告页。

具体代码的实现:

@interface SSLaunchAdView : UIView@property (nonatomic, strong) UIImageView *imageView;
///图片的下载链接
@property (nonatomic, strong) NSString *imageUrl;
///广告的显示时间
@property (nonatomic, assign) NSInteger AdTime;
///要等待的时间
@property (nonatomic, assign) NSInteger waitTime;@property (nonatomic, copy) void(^clickImageView)(SSLaunchAdView *view);
- (id)initWithFrame:(CGRect)frameAdTime:(NSInteger)AdTimewaitTime:(NSInteger)waitTimeonView:(UIView *)onView;
///点击广告响应
- (void)clickImageView:(void(^)(SSLaunchAdView *view))block;
///删除广告页
- (void)hideView;
@end#import "SSLaunchAdView.h"
#import "SDWebImageManager.h"@interface SSLaunchAdView ()@property (nonatomic, strong) UIImageView *bg_imageView;
@property (nonatomic, strong) NSTimer *myTimer;
@property (nonatomic, assign) NSInteger timeCount;
@property (nonatomic, strong) UIButton *button;@property (nonatomic, assign) BOOL isOutWaitTime;
@property (nonatomic, assign) BOOL isHasImage;
@end@implementation SSLaunchAdView- (id)initWithFrame:(CGRect)frame AdTime:(NSInteger)AdTime waitTime:(NSInteger)waitTime onView:(UIView *)onView{if (self = [super initWithFrame:frame]) {self.AdTime = AdTime;self.waitTime = waitTime;[onView addSubview:self];_bg_imageView = [UIImageView new];[self addSubview:_bg_imageView];[self->_bg_imageView setImage:[UIImage imageNamed:[self getLaunchImageName]]];_imageView = [UIImageView new];
//        _imageView.contentMode = UIViewContentModeScaleAspectFit;[self addSubview:_imageView];_button = [UIButton buttonWithType:UIButtonTypeCustom];[_button setTitle:@"跳过" forState:0];_button.titleLabel.font = [UIFont systemFontOfSize:12];[_button setTitleColor:[UIColor whiteColor] forState:0];_button.backgroundColor = [UIColor blackColor];[self addSubview:_button];[_button setHidden:YES];[_button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];_imageView.userInteractionEnabled = YES;UITapGestureRecognizer *tapImageView = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapImageView)];[_imageView addGestureRecognizer:tapImageView];if (waitTime>0) {[self performSelector:@selector(waitAction) withObject:nil afterDelay:waitTime+0.2];}}return self;
}- (void)layoutSubviews{[super layoutSubviews];self.frame = CGRectMake(0, 0, CGRectGetWidth(self.superview.frame), CGRectGetHeight(self.superview.frame));_bg_imageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.superview.frame), CGRectGetHeight(self.superview.frame));_imageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.superview.frame), CGRectGetHeight(self.superview.frame));if (@available(iOS 11.0, *)){_button.frame = CGRectMake(CGRectGetWidth(_imageView.frame)-50-20, _button.superview.safeAreaInsets.top+20, 50, 28);}else{_button.frame = CGRectMake(CGRectGetWidth(_imageView.frame)-50-20, 37, 50, 28);}
}- (void)buttonAction:(UIButton *)button{[self hideView];
}- (void)waitAction{@synchronized (self) {if (!self.isHasImage) {self.isOutWaitTime = YES;[self hideView];}}}- (void)tapImageView{
//    [self hideView];if (self.clickImageView) {self.clickImageView(self);}
}- (NSString *)getLaunchImageName
{CGSize viewSize = [[UIScreen mainScreen] bounds].size;// 竖屏NSString *viewOrientation = @"Portrait";NSString *launchImageName = nil;NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];for (NSDictionary* dict in imagesDict){CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]){launchImageName = dict[@"UILaunchImageName"];}}return launchImageName;
}- (void)setImageUrl:(NSString *)imageUrl{_imageUrl = imageUrl;if (!_imageUrl) {[self hideView];return;}__weak typeof(self) weakSelf = self;[[SDWebImageManager sharedManager]loadImageWithURL:[NSURL URLWithString:_imageUrl] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {__strong typeof(self) strongSelf = weakSelf;if (image&&finished&&!self.isOutWaitTime) {strongSelf.imageView.image = image;strongSelf.isHasImage = YES;[strongSelf addTimer];}}];
}- (void)hideView{[self removeTimer];[UIView animateWithDuration:0.2 animations:^{self.alpha = 0;} completion:^(BOOL finished) {[self removeFromSuperview];}];
}- (void)addTimer{_myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];[[NSRunLoop mainRunLoop]addTimer:_myTimer forMode:NSRunLoopCommonModes];if (self.imageView.image) {[_button setHidden:NO];}
}- (void)removeTimer{[_myTimer invalidate];_myTimer = nil;
}- (void)timerAction{_timeCount ++;if (_timeCount==self.AdTime) {[self hideView];}else{[_button setTitle:[NSString stringWithFormat:@"%ld跳过",self.AdTime-_timeCount] forState:0];}
}- (void)clickImageView:(void (^)(SSLaunchAdView *))block{self.clickImageView = block;
}复制代码

app启动广告页的实现,解决了广告图片要实时更新的问题相关推荐

  1. APP启动引导页的制作,用ViewPager实现翻页动画

    #Android网络与数据存储 第一章学习 ####一个启动引导页的制作#### 概要: 这次制作App的引导页,主要用到2个知识"SharedPreferences 和 ViewPager ...

  2. android广告视频播放,一种解决android广告视频启播前黑屏的方法与流程

    本发明涉及数字视频技术领域,具体的说,是一种解决android广告视频启播前黑屏的方法. 背景技术: 目前,Android系统已经作为普遍的智能电视平台出现在我们面前,为了提升电视平台的运营价值,很多 ...

  3. Android 避免APP启动闪黑屏的解决办法

    闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面 前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解 ...

  4. 玩转慕课网App启动引导页效果

    转载于"我叫岩仔":http://blog.csdn.net/a1002450926/article/details/50609587 今天给大家带来慕课网App的引导页面的效果实 ...

  5. App启动界面加载自己想要的图片

    1.利用系统自带的LanuchSreen,每次启动程序时,都会自动启动自带的LanuchScreen.xib文件:当然,只有在Xcode6之后才有... 2.直接看代码: 3.启动程序的画面效果: 4 ...

  6. 解决window聚焦图片不自动更新,没有“喜欢么”信息提示框问题

    最近电脑不知道怎么了,window聚焦自动切换成图片,而且换成window聚焦,喜欢么等提示框也消失了,查了很多的方法,很杂,而且还有比修改注册表的,有个方法可用. 0.需要全程联网,因为需要重新加载 ...

  7. iOS App启动+广告思路

    文章目录 需求 思路 1.判断文件是否存在,以及初始化广告位 2.无论沙盒中是否存在广告图片,都需要重新调用获取广告接口,判断广告是否更新 3.异步下载图片,以及删除旧图片 4.广告页面的跳过按钮倒计 ...

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

    需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.虽然说这个广告页面对用户 ...

  9. 关于App启动加载广告页面思路

    需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.虽然说这个广告页面对用户 ...

最新文章

  1. 晕死!博客园把我搞晕了!
  2. python学习笔记(七)函数
  3. 给一个元素插入一段HTML
  4. java buffalo_随你怎么玩!Buffalo 网络硬盘新潮流
  5. 使用Hash碰撞进行DoS攻击
  6. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
  7. jeesite中activiti中的流程表梳理
  8. sql domain credentail
  9. linux下无法正常打开pdf文件的解决方法
  10. 谭浩强c语言入门prd,完整C语言谭浩强学习笔记.docx
  11. 状态机详解(一段式、二段式、三段式)
  12. 完整版28K易支付系统源码+第四方Oreo支付源码
  13. 質量機能展開(QFD)的使用及注意事項簡析
  14. cadence SPB17.4 - allegro DRC - Physical - Maximum Neck Length
  15. 华为服务器用户名密码忘记,电脑坏了,腾讯云华为云忘记宝塔面板登陆名和密码怎么办?...
  16. 返回一个月中最大的天数(适用于2000年到2099年之间)
  17. 南理工硕士论文latex模板
  18. 若要赞美晴天 请等到黄昏之后
  19. 理解std::move和std::forward
  20. CCS10,安装SDK后,软件无法识别问题

热门文章

  1. java 及时释放内存_JMM(一):初识Java内存模型
  2. terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr
  3. 解决App启动时白屏的问题
  4. SQL Server Management Studio清除历史登陆记录
  5. Mysql Hunter
  6. Android 进程常驻(5)----开机广播的简单守护以及总结
  7. 第16讲 用户程序的结构与执行
  8. OS X 10.11 安装Cocoapods
  9. 常用的搜索引擎dork (不断更新)
  10. SQLite入门之数据类型