zoukankan      html  css  js  c++  java
  • 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(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,引导页出现,反之则出现广告业!

  • 相关阅读:
    c3p0、dbcp、proxool、BoneCP比较
    velocity的一些优化记录
    JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
    Deployment failure on Tomcat 7.x. Could not copy all resources to
    Spring3.2.3+Quartz2.2.1 整合配置
    mysql批量insert速度超慢
    Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件上传
    实现工资的按天统计(X:日期 Y:姓名)
    Java发邮件带附件(且重命名附件)
    微信小程序wx.switchTab传参问题
  • 原文地址:https://www.cnblogs.com/hero11223/p/7472601.html
Copyright © 2011-2022 走看看