以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的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:@"跳过 %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:@"跳过 %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:@"跳过 %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,引导页出现,反之则出现广告业!