以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的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(0, 0, 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(0, 0, MainScreen_width, MainScreen_height-107)];
// smallImg.image = [UIImage imageNamed:@"start-ad"];
[imageView addSubview:smallImg];
timerBtn = [[UIButton alloc]initWithFrame:CGRectMake(MainScreen_width - 13 - 48, 13, 48, 48)];
[self initView];
}
return self;
}
-(void)initBtn
{
timerBtn.clipsToBounds = YES;
timerBtn.layer.cornerRadius = 24;
[timerBtn setTitleColor:RGB(255, 221, 0) forState:UIControlStateNormal];
timerBtn.titleLabel.font = [UIFont systemFontOfSize:12];
[timerBtn addTarget:self action:@selector(jumpBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:timerBtn];
timerBtn.titleLabel.numberOfLines = 2;
timerBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
timerBtn.backgroundColor = RGBA(29, 29, 29, 0.5);
//开始倒计时
countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 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 = 5;//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:@"1"]) {
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==0){
[countDownTimer invalidate];
self.hidden = YES;
}
}
@end
具体效果就不上传了,可以直接复制上面的代码,自行运行查看效果;
c,在AppDelegate里面添加,就是给当前window添加一个根视图:
hDisplayView *hVC = [[hDisplayView alloc] initWithFrame:CGRectMake(0, 0, MainScreen_width, MainScreen_height)];
hVC.hidden = NO;
[self.window.rootViewController.view addSubview:hVC];
[self.window bringSubviewToFront:hVC];
搞定,这两个效果可以结合用,判断第一次运行app,引导页出现,反之则出现广告业!
标签:--,self,ios,dispatch,initWithFrame,timerBtn,MainScreen,imageView,新手 From: https://blog.51cto.com/u_13188203/7190256