首页 > 其他分享 >ios开发之--新手引导页的添加

ios开发之--新手引导页的添加

时间:2023-08-22 15:34:51浏览次数:37  
标签:-- self ios dispatch initWithFrame timerBtn MainScreen imageView 新手

以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的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

相关文章

  • 写专利中需要注意的地方
    1、visio直接复制粘贴到word中,在word中使用ctrl+shift+F9转化为图片,点击图片后右击,选择图片颜色选择灰度 2.公式一定要用word中的写 ......
  • Java8实现联合排序
    Comparator<MyObject>combined=Comparator.comparing(MyObject::getField1,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getField2,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getF......
  • 科大讯飞AI大模型,太猛了!
    最近几个月,以ChatGPT为代表的AIGC迅速崛起,国内头部科技企业之间也掀起了百模大战,在众多的大模型当中我比较看好的一家就是:科大讯飞。我很早就通过科大讯飞老朋友,拿到了体验账号,简单体验了一下,谈谈我的具体感受吧。(我找科大讯飞星火大模型的一个朋友申请了一个专属申请链接:点击申......
  • 有奖活动 | 以代码之名,写出对Ta的爱
     七夕情人节到了,为了Ta,你打算用什么方式表达爱?是包包、鲜花、美酒、巧克力,还是一封充满爱意的短信? 在HarmonyOS,有一群精致又机智的开发者们,他们#以代码之名,表达爱#比起鲜花美酒巧克力,这种浪漫无人能及,不仅独特、高级、而且码力值MAX,创意MAX!意外的惊喜,谁又不喜欢~......
  • primitives
    new的动作:默认调用全局operatornew,指针转型,构造。delete的动作:析构,然后默认调用全局operatordelete。全局的operatornew&全局的operatordelete就是做malloc&free。如果operatornew&operatordelete被重载,则会调用重载版本。加一层oepratornew中间层,提供更多的编程......
  • ios开发之--简单动画效果的添加
    记录一个简单的动画效果,自己写的,很简单,仅做记录。附一个demo的下载地址:https://github.com/hgl753951/hglTest.git代码如下:1,准备BOOL_isOpen;NSMutableArray*_btnArray;2,具体代码-(void)initUI{_btnArray=[[NSMutableArrayalloc]init];for(inti=0;i<4;i+......
  • 红包看广告赚钱app开发源码
      经常玩手机的人都看到过,手机app软件上都有开屏的广告,这种广告是收费的。也是软件平台盈利的一种模式,为了让用户实现更大化的盈利,平台商可以把软件上的收费模式增加更多。因为有市场才会出现这么多人进来参与这个项目,本文就以看广告开红包赚钱的app为例,看看这款app软件的模式......
  • 生信:一起读官方文档 featureCounts 篇
    一起读官方文档featureCounts篇featureCounts介绍用于为高通量测序数据(例如RNA-seq、ChIP-seq、ATAC-seq等)计数读取(reads)与注释特征(例如基因、转录本)的重叠。它是Subread软件包的一部分,特别适用于RNA-seq数据的基因表达量分析。快速使用featureCounts\-a../genome/......
  • ios开发之--UIViewContentMode详解
    在开发当中有时会有这样的需求,将从服务器端下载下来的图片添加到imageView当中展示,但是下载下来的图片尺寸大小不固定,宽高也有可能不成比例如果直接设置imageView的image属性而不设置contentMode那么图片会默认填满整个容器,导致图片变形,影响美观.直接设置1个正方形的imageVi......
  • elasticsearch
    最典型的是两个应用场景:全文检索 和 复杂查询。正排索引,也叫正向索引(ForwardIndex),是通过文档ID去查找关键词(文档内容)。倒排索引,也叫反向索引(InvertedIndex),是通过关键词查找文档ID。must:其查询子句必须全部被满足,逻辑相当于and,并且会计算分数。filter:与must作用一......