ios开发之--新手引导页的添加
以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的vc里面直接写,但是那样并不是很方便,启动页里面往往会添加很多的东西,所以封装成一个单独的类,可以直接使用,即便是后期的更换,或者是其他的工程项目里面需要,直接拖过去,就可以直接使用非常方便!
具体代码就不上传了,附demo的下载地址:
https://github.com/hgl753951/launchTest.git
早先在cocoachina上上传的一个demo:
http://code.cocoachina.com/view/131777
比较简单,可以直接下载demo来看!
下面写一个带有倒计时的广告页功能:
1,新创建一个集成于UIView的类:
@interface hDisplayView : UIView
2,.m文件
a,准备
@interface hDisplayView ()
{
NSInteger imgTag;
NSString *picURl;
UIImageView *imageView;
UIImageView *smallImg;
UIButton *timerBtn; int secondsCountDown; //倒计时总时长
NSTimer *countDownTimer;
}
@property(nonatomic,strong)NSFileManager *fileManager;
@property(nonatomic,strong)NSFileHandle *writeHandle;
@property(nonatomic,assign)long long sumLength;
@property(nonatomic,assign)long long currentLength;
@property(nonatomic,strong)UIImage *savedImage;
b,具体实现
@implementation hDisplayView -(instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame]; if (self) {
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(, , MainScreen_width, MainScreen_height)];//大背景图片 if (IS_IPHONE4 == YES) {
imageView.image = [UIImage imageNamed:@"start_ios-1"];
}else
{
imageView.image = [UIImage imageNamed:@"start_ios"];
} imageView.userInteractionEnabled = YES;
[self addSubview:imageView]; smallImg = [[UIImageView alloc]initWithFrame:CGRectMake(, , MainScreen_width, MainScreen_height-)];
// smallImg.image = [UIImage imageNamed:@"start-ad"];
[imageView addSubview:smallImg]; timerBtn = [[UIButton alloc]initWithFrame:CGRectMake(MainScreen_width - - , , , )]; [self initView];
}
return self;
} -(void)initBtn
{ timerBtn.clipsToBounds = YES;
timerBtn.layer.cornerRadius = ;
[timerBtn setTitleColor:RGB(, , ) forState:UIControlStateNormal];
timerBtn.titleLabel.font = [UIFont systemFontOfSize:];
[timerBtn addTarget:self action:@selector(jumpBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:timerBtn];
timerBtn.titleLabel.numberOfLines = ;
timerBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
timerBtn.backgroundColor = RGBA(, , , 0.5); //开始倒计时
countDownTimer = [NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timeFireMethod) userInfo:nil repeats:YES]; //启动倒计时后会每秒钟调用一次方法 timeFireMethod
[[NSRunLoop mainRunLoop] addTimer:countDownTimer forMode:NSDefaultRunLoopMode]; //[NSThread detachNewThreadSelector:@selector(starTimer) toTarget:self withObject:nil]; //设置倒计时显示的时间
//设置倒计时总时长
secondsCountDown = ;//60秒倒计时
[timerBtn setTitle:[NSString stringWithFormat:@"跳过\n%ds",secondsCountDown] forState:UIControlStateNormal]; // NSTimeInterval period = 1.0; //设置时间间隔
// 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), period * NSEC_PER_SEC, 0); //每秒执行
// dispatch_source_set_event_handler(_timer, ^{
// //在这里执行事件
// if (secondsCountDown<=0) {
// dispatch_source_cancel(_timer);
// dispatch_async(dispatch_get_main_queue(), ^{
// self.hidden = YES;
// });
//
// }else{
// dispatch_async(dispatch_get_main_queue(), ^{
//
// if (secondsCountDown==0) {
// self.hidden = YES;
// }else{
// [timerBtn setTitle:[NSString stringWithFormat:@"跳过\n%ds",secondsCountDown] forState:UIControlStateNormal];
// }
// });
// secondsCountDown--;
// }
// NSLog(@"循环执行");
// //[self timeFireMethod];
// });
// dispatch_resume(_timer); } -(void)initView
{
//先进行判断,1:如果是第一次启动不显示此启动图片,2:如果不是第一次启动,那么加载此启动图片,如果图片不存在就下载,如果图片存在就读取缓存
hUser *huser = [[hUser alloc]init];
[hHttpEngine getStartupPicRequest:huser success:^(id response) {
NSLog(@"respons ----%@",response);
NSDictionary *dict = (NSDictionary *)response;
NSString *stautes = [NSString stringWithFormat:@"%@",[dict objectForKey:@"status"]];
if ([stautes isEqualToString:@""]) {
picURl = [NSString stringWithFormat:@"%@",[dict objectForKey:@"pic"]];
NSLog(@"picurl is %@",picURl);
[smallImg sd_setImageWithURL:[NSURL URLWithString:picURl] placeholderImage:[UIImage imageNamed:@""]];
smallImg.userInteractionEnabled = YES;
[self initBtn];
}
}failure:^(NSError *err) {
self.hidden = YES;
}]; } -(void)jumpBtnClick:(id)sender
{
self.hidden = YES;
} -(void)timeFireMethod{ //倒计时-1
secondsCountDown--;
//修改倒计时标签现实内容
[timerBtn setTitle:[NSString stringWithFormat:@"跳过\n%ds",secondsCountDown] forState:UIControlStateNormal]; //当倒计时到0时,做需要的操作,比如验证码过期不能提交
if(secondsCountDown==){
[countDownTimer invalidate];
self.hidden = YES;
}
} @end
具体效果就不上传了,可以直接复制上面的代码,自行运行查看效果;
c,在AppDelegate里面添加,就是给当前window添加一个根视图:
hDisplayView *hVC = [[hDisplayView alloc] initWithFrame:CGRectMake(, , MainScreen_width, MainScreen_height)];
hVC.hidden = NO;
[self.window.rootViewController.view addSubview:hVC];
[self.window bringSubviewToFront:hVC];
搞定,这两个效果可以结合用,判断第一次运行app,引导页出现,反之则出现广告业!
ios开发之--新手引导页的添加的更多相关文章
- ios开发之--新手引导页图片适配方案
1,图片适配,最早以前是自己命名规范,例如@1x,@2x,@3x等,3套图基本上就够用了 2,在iPhone X之后,需要适配的图就多了,因为分辨率增多了,屏幕尺寸也增多了 3,尺寸 :640*960 ...
- 在iOS开发中,给项目添加新的.framework
首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ...
- IOS开发效率之为Xcode添加常用的代码片段
IOS开发效率之为Xcode添加常用的代码片段 原文地址:http://blog.csdn.net/pingchangtan367/article/details/30041285 tableview ...
- iOS开发 关于启动页和停留时间的设置
引言: 在开发一款商业App时,我们大都会为我们的App设置一个启动页. 苹果官方对于iOS启动页的设计说明: 为了增强应用程序启动时的用户体验,您应该提供一个启动图像.启动图像与应用程序的首屏幕看起 ...
- iOS开发-在表单元中添加子视图
#import <UIKit/UIKit.h> @interface NameAndColorCellTableViewCell : UITableViewCell @property(c ...
- iOS开发中在UIWebView中添加Gif动态图
开发是一件很有趣的事,偶尔在程序中添加一些小东西,会给你的应用增色不少.比如,当你的某些功能暂时还不准备上线时,可以先一个放展示Gif动态图的UIWebView上去,既可以告诉用户APP以后会有的功能 ...
- iOS开发:为xcode项目添加git仓储
现在apple官网下载Command Line Tools 对应mac版本和xcode版本,记录地址:https://developer.apple.com/downloads/ 找到mac的终端,c ...
- IOS开发中如何给UIImageView添加点击事件
1.先创建一个UIImageView控件: photeImageView = [[UIImageView alloc]init]; photeImageView.frame = CGRectMake( ...
- iOS开发之--为PCH文件添加绝对路径
要想设置PCH的相对路径,首先我们需要去查看绝对路径. 相对路径 点击PCH文件,Xcode的右侧会显示PCH的属性.这里我们可以获取到PCH的绝对路径.从工程的路径开始,前面使用$(SRCROOT) ...
随机推荐
- 深入浅出c++之---this指针
前言:C语言中的数组指针和指针数组 数组指针,是指向数组的指针的缩写:指针数组,是存放指针的数组的缩写.其实很多时候,往往因为简写和缩写带给我们很多困惑.我曾想过不用简称去学习,但在很多时候,我们查询 ...
- 浅谈C#委托和事件【转】
委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...
- [状态机]嵌入式设计模式:有限状态自动机的C语言实现
转自:http://www.cnblogs.com/autosar/archive/2012/06/22/2558604.html 状态机模式是一种行为模式,在<设计模式>这本书中对其有详 ...
- oops_根据epc定位linux_kernel_panic位置
韩大卫@吉林师范大学 2014.12.10 转载请表明出处 ***************************************************** 关于内核报错 “Unable t ...
- IOS中摇一摇实现截屏(可实现问题反馈的功能)
有一段时间没有更新博客了,今天更新一篇关于最近工作中用到的一个功能,先简单描述一下:我们知道,测试人员在测试客户端产品时,当出现问题或者BUG的时候,都得先对页面截图,然后从相册中选择截图,加上一段描 ...
- Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数
操作步骤: 1. 修改.hiverc文件 在hive的conf文件夹下面,如果没有.hiverc文件,手工自己创建一个. 参照如下格式添加: add jar /usr/local/hive/exter ...
- 商务导航路由配置 2——端口映射 内网通过公网IP访问设置
- js学习笔记32----new
new:用于创建一个对象. 有 new 与 无 new 时的区别,查看下面的示例代码应该会增加感觉: <!DOCTYPE html> <html lang="en" ...
- 不可错过的10个超棒jQuery表单操作代码片段
jQuery 绝对是一个伟大的开源javascript类库,是帮助我们快速和高效开发前端应用的利器.可能大家在日常的开发过程中常常会处理表单相关的 javascript,在今天这篇代码片段分享文章中, ...
- 关于Cocos2d-x很多奇怪的报错
1.说什么找不到类和命名空间,但是已经包含头文件 项目-属性-配置属性-C/C++-附加包含目录-编辑-添加新行-写上$(EngineRoot) 2.很多语句报错,但是都没问题 我是这样理解的,书上的 ...