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:@"跳过\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,引导页出现,反之则出现广告业!

时间: 2024-10-11 11:17:52

ios开发之--新手引导页的添加的相关文章

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断 项目里面在点击tabbarItem的时候需要判断是否是登录状态,如果未登录直接跳转登录页面,如果已登录则直接进入. 首先设置UITabBarController的代理为appdelegate如下:myTabBar.delegate = self; 然后在interface后面写上代理<UITabBarControllerDelegate> 实现代理里面的- (BOOL)tabBarController:(UITabBarCont

在iOS开发中,给项目添加新的.framework

首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件.另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间. 上面提到

iOS开发效率之为Xcode添加常用的代码片段

tableview是我们经常使用的控件,而使用tableview控件需要自己去实现一些基本的tableview的代理.这些对于每个程序基本上都是大同小异.对于声明property来说也是我们经常需要做的工作.所以我们需要把这些公用的东西总结成代码块,供我们以后的快捷使用. 具体步骤如下: 1.将我们需要重复使用的代码块全部选中拖到下图右下角的libray里面去. 2.这时候会弹出一个对话框需要我们填入一些基本信息 从上到下依次是: Title 代码片段的标题 Summary 代码片段的描述文字

Xamarin iOS开发实战上册-----2.2 添加和定制视图

2.2  添加和定制视图 本节将主要讲解视图的两种添加方式:一种是使用Interface Builder:一种是使用代码:以及定制视图等内容. 2.2.1  使用Interface Builder添加视图 使用Interface Builder添加视图是一个相当简单的工作.以下的示例将为开发者讲解该如何使用Interface Builder添加视图. [示例2-1]以下将使用Interface Builder添加一个视图,具体步骤如下: (1)创建一个Single View Applicatio

iOS开发中在UIWebView中添加Gif动态图

开发是一件很有趣的事,偶尔在程序中添加一些小东西,会给你的应用增色不少.比如,当你的某些功能暂时还不准备上线时,可以先一个放展示Gif动态图的UIWebView上去,既可以告诉用户APP以后会有的功能,也会使你的APP手动可爱,打动一大波妹子. #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIWebView *myWalletWebView; @

ios开发 在cell中动态添加图片解决重复出现图层问题

1.在cell初始化的时候创建scrollView,然后往scrollView中添加imageView,最后在重用cell的时候动态计算scrollView的高度 总而言之,就是初始化创建控件要放在cell的init里面,赋值放init外面,不然每次循环都会重复创建imageView视图 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UI

iOS开发:为xcode项目添加git仓储

现在apple官网下载Command Line Tools 对应mac版本和xcode版本,记录地址:https://developer.apple.com/downloads/ 找到mac的终端,command+空格,搜索"终端",进入后,输入如下命令: cd 项目根目录   //进入到项目根目录 git init  //初始化本地代码库 git add . 或者 git add -A   //添加要提交的文件,这里添加所有 git commit -m "first com

#iOS开发常用方法集锦#为UITableView添加UISwipeGestureRecognizer手势

? 本文永久地址为http://www.cnblogs.com/ChenYilong/p/4103039.html ,转载请注明出处. 印象笔记链接:https://app.yinxiang.com/shard/s22/sh/04150175-aac6-4981-b71d-d7246de3037b/a0f139b2619a4607 ? ? ? <UIGestureRecognizerDelegate> -(void)viewDidLoad { ? ? [superviewDidLoad]; ?

iOS开发手记 - iOS9.3 UINavigationController添加后不显示storyboard中viewcontroller里的控件的解决方法

我原先是这么做的,通常也是这么做 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. ViewController *firstVC = [[ViewController alloc] init]; UIN