iOS启动图和开屏广告图,类似网易

iOS启动图和开屏广告图,类似网易

启动图是在iOS开发过程中必不可少的一个部分,很多app在启动图之后会有一张自定义的开屏广告图,点击该广告图可以跳转到广告图对应的页面。今天呢,和大家分享一下如何添加这张广告图以及点击广告图的跳转。这个广告图是通过将UIImageView添加到UIWindow上实现的。

一.添加本地启动图

1.准备好本地图片

2.找到工程中的Images.xcassets文件,打开LaunchImage,将图片拖到对应的地方,如下图:

3.将LaunchScreen.storyboard文件中右边的Use as Launch Screen选项关闭(不要选择此项)如图:

4.将Launch Images Source选择为LaunchImage ,再将Launch Screen File置空。如图:

5.可在Appdelegate中设置启动图停留的时间

//        启动页停留1秒

[NSThread sleepForTimeInterval:1];

6.运行工程可看到设置的启动图(如果没有,可将app先删除,然后重新运行一次即可)

二.添加开屏广告图

这个广告图的实现是基于作者周焕强的App启动加载广告页面思路,然后自己增加了一些小补充。因为广告是有时效性的,不是每次启动的时候都会去显示这个广告页面。所以这里的原则是,后台返回的数据中包括广告图片、广告图片对应的URL、以及该广告的截止时间。运行程序时会请求广告图数据,将数据保存到本地。再次运行时从本地中将保存的图片取出,同时判断图片的截止日期是否有效,若图片存在且在有效期内,则将广告图显示出来;再次请求广告图数据,以免有新的广告数据。

1.创建自定义的SplashScreenView。我在将ImageView加到Window上时,遇到添加不成功的情况,后面打印window的时候发现,window的hidden属性是YES,于是将其设为NO后就成功了。

/** 显示广告页面方法*/

- (void)showSplashScreenWithTime:(NSInteger )ADShowTime;

/** 广告图的显示时间*/

@property (nonatomic, assign) NSInteger ADShowTime;

/** 图片路径*/

@property (nonatomic, copy) NSString *imgFilePath;

/** 图片对应的url地址*/

@property (nonatomic, copy) NSString *imgLinkUrl;

/** 广告图的有效时间*/

@property (nonatomic, copy) NSString *imgDeadline;

2.实现显示广告页的方法,这里会根据保存下来的广告图截止时间和是否有该图片去显示。比较日期的先后,可以先将当前日期和保存下来的广告图转换成相同的日期格式,将两者进行比较,根据比较结果的 升序或降序来判断日期的先后。

- (void)showSplashScreenWithTime:(NSInteger)ADShowTime

{

_ADShowTime = ADShowTime;

[_countButton setTitle:[NSString stringWithFormat:@"跳过%ld",ADShowTime] forState:UIControlStateNormal];

//

NSDateFormatter *dataFormatter = [[NSDateFormatter alloc] init];

dataFormatter.dateFormat = @"MM/dd/yyyy HH:mm";

//获取当前系统的时间,并用相应的格式转换

[dataFormatter stringFromDate:[NSDate date]];

NSString *currentDayStr = [dataFormatter stringFromDate:[NSDate date]];

NSDate *currentDate = [dataFormatter dateFromString:currentDayStr];

//广告截止的时间,也用相同的格式去转换

NSString * timeStampString = self.imgDeadline;

//时间戳的日期格式转换方法

//    NSTimeInterval _interval=[timeStampString doubleValue] / 1000.0;

//    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];

//    NSString *deadlineStr = [dataFormatter stringFromDate:date];

//    NSDate *dateA = [dataFormatter dateFromString:deadlineStr];

//     NSDate *deadlineDate = [dataFormatter dateFromString:_imgDeadline];

NSDate *deadlineDate = [dataFormatter dateFromString:_imgDeadline];

NSLog(@"当前日期:%@ 存下的截止日期:%@", currentDayStr, timeStampString);

NSComparisonResult result;

result = [deadlineDate compare:currentDate];

/**

*  将存下来的日期和当前日期相比,如果当前日期小于存下来的时间,则可以显示广告页,反之则不显示

*/

if (result == NSOrderedAscending) {

[self dismiss];

}else{

[self startTimer];

UIWindow *window = [[UIApplication sharedApplication].delegate window];

window.hidden = NO;

[window addSubview:self];

}

}

3.请求广告数据。请求数据时,先判断该图片是否存在,如果不存在的话,先将旧的图片删除掉,然后去下载新的图片。删除就照片的时候需要注意,先去判断保存下来的图片名字和本地沙盒中存在的图片是否一致,如果不一致,说明图片有更新,此时删除沙盒中的旧图片,如果一致,则不需要进行删除操作,否则找不到已保存的图片。

+ (void)getAdvertisingImageData

{

NSArray *imageArray = @[@"http://img1.126.net/channel6/2016/022471/0805/2.jpg?dpi=6401136", @"http://image.woshipm.com/wp-files/2016/08/555670852352118156.jpg"];

NSString *imageUrl = imageArray[0];

NSString  *imgLinkUrl = @"http://www.jianshu.com/users/e4c63b354a77/latest_articles";

NSString  *imgDeadline =  @"08/30/2016 14:25";

// 获取图片名

NSArray *stringArr = [imageUrl componentsSeparatedByString:@"/"];

NSString *imageName = stringArr.lastObject;

// 拼接沙盒路径

NSString *filePath = [self getFilePathWithImageName:imageName];

BOOL isExist = [self isFileExistWithFilePath:filePath];

if (!isExist){// 如果该图片不存在,则删除老图片,下载新图片

[self downloadAdImageWithUrl:imageUrl imageName:imageName imgLinkUrl:imgLinkUrl imgDeadline:imgDeadline];

}

}

/**

*  下载新的图片

*/

+ (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName imgLinkUrl:(NSString *)imgLinkUrl imgDeadline:(NSString *)imgDeadline

{

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

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

UIImage *image = [UIImage imageWithData:data];

NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称

[UIImageJPEGRepresentation(image, 0) writeToFile:filePath atomically:YES];

if ([UIImageJPEGRepresentation(image, 0) writeToFile:filePath atomically:YES]) {

// 保存成功

//判断保存下来的图片名字和本地沙盒中存在的图片是否一致,如果不一致,说明图片有更新,此时先删除沙盒中的旧图片,如果一致说明是删除缓存后再次下载,这时不需要进行删除操作,否则找不到已保存的图片

if (![imageName isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:adImageName] ]) {

[self deleteOldImage];

}

[[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName];

[[NSUserDefaults standardUserDefaults] setValue:imgLinkUrl forKey:adUrl];

[[NSUserDefaults standardUserDefaults] setValue:imgDeadline forKey:adDeadline];

[[NSUserDefaults standardUserDefaults] synchronize];

}else{

NSLog(@"保存失败");

}

});

}

/**

*  删除旧图片

*/

+ (void)deleteOldImage

{

NSString *imageName = [[NSUserDefaults standardUserDefaults] valueForKey:adImageName];

if (imageName) {

NSString *filePath = [self getFilePathWithImageName:imageName];

NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager removeItemAtPath:filePath error:nil];

[[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adImageName];

[[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adUrl];

[[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adDeadline];

[[NSUserDefaults standardUserDefaults] synchronize];

}

}

最后的效果如图:

demo地址

时间: 2024-08-03 20:21:20

iOS启动图和开屏广告图,类似网易的相关文章

iOS启动页加载广告

1.定义全局成员变量 @interface AppDelegate () @property (strong, nonatomic) UIImageView *adImageView; @property (strong, nonatomic) UINavigationController *rootNavi; @end 2.实现简单广告界面 @implementation AppDelegate - (BOOL)application:(UIApplication *)application

启动图后面 添加有倒计时的广告图

今天闲来无事,看到很多APP在启动图后面添加了广告图,今天就动手做了一下, 刚开始,打算用通知在APPdelegate中添加这个图片,但是尝试后发现,效果不是很理想:就在rootVC中进行操作了 直接上代码: -(void)gotoImage { self.window = [[UIApplication sharedApplication].delegate window]; self.mianImageview = [[UIImageView alloc]init]; _mianImagev

[转]IOS启动图以及应用图标

设置应用程序图标和引导画面 一个好的应用程序图标,不仅会给用户留下良好的第一印象,而且可以帮助用户在茫茫多的桌面图标中,快速发现你的应用程序.本文将介绍如何把已经设计好的图标以及启动图片添加到我们的应用程序. 大纲 图标的规格及说明: 启动图片规格及说明: 添加素材演练: 设定启动图片显示时间. 一. 图标规格及说明 iOS中图标的名称及规格见下表: 序号 文件名 规格 说明 备注 1 iTunesArtwork 512 * 512 发布到App Store时使用 可选 2 Icon.png 5

iOS 启动页多语言

iOS 启动页多语言 个人网站: Colin's Nest 转载请注明出处. iOS开发交流群: 184226705. 欢迎加入~ 启动页适配多语言, 想必很多 App 都有类似的需求.但是之前尝试过程中, 发现 "多语言" 的那几种实现方式, 在欢迎页上都不适应, 直到遇到了 UILaunchImages ~ 下文将详细描述如何实现启动页多语言. 传统多语言设置 说起多语言, 我们无非这样实现: 为 App 添加多语言支持. 添加对应的配置, 资源. 比如: 文本: 图片: 使用对应

iOS 9 更新之Safari广告拦截器(Content Blocker)开发实战

金田( github 源码下载) 相对于谷歌对广告拦截的禁止,苹果与之态度截然相反,继Mac版Safari加入广告拦截工具之后,即将到来的iOS9对Safari也引入了内容拦截插件-Content Blocker,并且开发者可以使用最新的Xcode7开发以及使用iOS 9模拟器进行调试,下面,笔者将用一个简单的实例进行讲解如何开发Content Blocker. 在使用Google搜索时,排行靠前面的几条永远都是广告项,比如搜索“iPhone6”,得到的结果如图1所示: 图1 Google 搜索

KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)

软件交流群:571171251(软件在群内提供) krpano技术交流群:551278936(软件在群内提供) 软件功能介绍 KRPano资源分析工具具有以下特性: 1.分析保存网站资源,包括查看网站资源树形(平铺)结构,单个资源文件实时打开,整站资源批量保存,资源过滤筛选保存等功能 2.一键解密被KRPano加密的XML文件 3.一键解密被KRPano加密后的JS文件 4.解密/美化被加密或混淆的JS文件 5.KRPano网站切片图批量下载 6.KRPano切片图一键还原球面图 7.批量下载多

图论:图的概念与图的储存方式

转载自http://acm.uestc.edu.cn/bbs/read.php?tid=5670 下载ppt帐号:qscqesze 密码:123456 ------------------------------------------------------------------- 1.图的基本概念 图:二元组(V, E) .V 为顶点集.E为V 中结点之间的边的集合. 自环:一条边的两个端点是相同的. 多重边:两个端点之间有两条以上的边,称他们是多重边. 简单图:没有自环和多重边的图 无向

图、图的存储、图的遍历

图(Graph)是由顶点的有穷非空集合和顶点之间的边组成.G(V,E) V表示顶点的集合,E表示边的集合. 在无向图中,边可以表示为E1={(A,D),(B,C)} 在有向图中,顶点v1和v2的有向边称为弧.表示为<v1,v2> v1称为弧尾,v2称为弧顶. 在无向图中,如果任意边两个顶点都存在边,则该图为无向完全图,n个顶点的无向完全图有n*(n-1)/2条边. 在有向图中,如果任意边两个顶点都存在互为相反边,则该图为有向完全图,n个顶点的有向完全图有n*(n-1)条边. 稀疏图,稠密图.

Android之自定义控件实现天气温度折线图和饼状图

以前写了个天气的APP,最近把他更新了一个版本,就抽取其中的天气温度折现图这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 效果如图: 代码: MainActivity.Java /**** * 饼状图和天气折线图 */ public class MainActivity extends AppCompatActivity { private WeatnerChartView chart1; private WeatnerChartView chart2; private PinChart