首页 > 其他分享 >swift--添加新手引导页

swift--添加新手引导页

时间:2023-08-22 15:35:46浏览次数:45  
标签:-- self scrollView width MainScreen 新手 swift frame pageControl

swift和oc逻辑上都是一样的,只是写法不一样,可以使用一个view,也可以使用一个viewController,两种都可以的,使用view注意初始化的时候给他一个frame,vc的话,直接在本控制器里面写控制即可!

 

1,创建一个vc,然后在里面初始化一个scrollview,升值contentsize为3 * 页面宽度,然后添加图片,最后可以实现相应的代理方法,判断最后是点击进入主页,还是滑动

具体代码如下:

import UIKit

class hDisplayViewController: UIViewController,UIScrollViewDelegate {
    
    //页面数量
    var numOfPages = 3
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let frame = self.view.bounds
        //scrollView的初始化
        let scrollView = UIScrollView()
        scrollView.frame = self.view.bounds
        scrollView.delegate = self
        //为了能让内容横向滚动,设置横向内容宽度为3个页面的宽度总和
        scrollView.contentSize = CGSize(width:frame.size.width * CGFloat(numOfPages),
                                        height:frame.size.height)
        print("\(frame.size.width*CGFloat(numOfPages)),\(frame.size.height)")
        scrollView.isPagingEnabled = true
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.showsVerticalScrollIndicator = false
        scrollView.scrollsToTop = false
        for i in 0..<numOfPages{
            let imgfile = "bg\(Int(i+1)).png"
            print(imgfile)
            let image = UIImage(named:"\(imgfile)")
            let imgView = UIImageView(image: image)
            imgView.frame = CGRect(x:frame.size.width*CGFloat(i), y:CGFloat(0),
                                   width:frame.size.width, height:frame.size.height)
            scrollView.addSubview(imgView)
        }
        scrollView.contentOffset = CGPoint.zero
        self.view.addSubview(scrollView)
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        print("scrolled:\(scrollView.contentOffset)")
        let twidth = CGFloat(numOfPages-1) * self.view.bounds.size.width
        //如果在最后一个页面继续滑动的话就会跳转到主页面
        if scrollView.contentOffset.x > twidth {
//            let mainStoryboard = UIStoryboard(name:"Main", bundle:nil)
//            let viewController = mainStoryboard.instantiateInitialViewController()
//           self.present(MainVC(), animated: true, completion: nil)
            let rootVC = UIApplication.shared.delegate as! AppDelegate
            rootVC.window?.rootViewController = MainVC()
        }
    }
}

2,在appdelegate里面写如下代码,判断是否第一次安装,

//这里判断是否第一次启动APP
        if (!(UserDefaults.standard.bool(forKey: "everLaunched"))) {
            UserDefaults.standard.set(true, forKey:"everLaunched")
            let guideViewController = hDisplayViewController()
            self.window!.rootViewController=guideViewController;
            print("guideview launched!")
        }

如下图:

swift--添加新手引导页_初始化

这样就完成了!

下面分享一个oc版的:

.h

@interface hDisplayView : UIView

.m :注意实现代理方法,判断偏移量或者其他的都行,因为是view,也可以添加手机或者按钮(建议frame是全屏幕大小的),然后实现响应事件隐藏就行了!

#import "hDisplayView.h"

@interface hDisplayView ()<UIScrollViewDelegate>
{
    UIScrollView    *_bigScrollView;
    NSMutableArray  *_imageArray;
    UIPageControl   *_pageControl;
}

@end

@implementation hDisplayView

-(instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _imageArray = [@[@"闪屏1.png",@"闪屏2.png", @"闪屏3.png",@"闪屏4.png"]mutableCopy];
        
//        _imageArray = [NSMutableArray arrayWithObjects:@"闪屏1.png",@"闪屏2.png", @"闪屏3.png",@"闪屏4.png", nil];
        
        UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, MainScreen_width, MainScreen_height)];
        
        scrollView.contentSize = CGSizeMake((_imageArray.count + 1)*MainScreen_width, MainScreen_height);
        //设置反野效果,不允许反弹,不显示水平滑动条,设置代理为自己
        scrollView.pagingEnabled = YES;//设置分页
        scrollView.bounces = NO;
        scrollView.showsHorizontalScrollIndicator = NO;
        scrollView.delegate = self;
        [self addSubview:scrollView];
        _bigScrollView = scrollView;
        
        for (int i = 0; i < _imageArray.count; i++) {
            UIImageView *imageView = [[UIImageView alloc]init];
            imageView.frame = CGRectMake(i * MainScreen_width, 0, MainScreen_width, MainScreen_height);
            UIImage *image = [UIImage imageNamed:_imageArray[i]];
            imageView.image = image;
            
            [scrollView addSubview:imageView];
        }
        
        UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(MainScreen_width/2, MainScreen_height - 60, 0, 40)];
        pageControl.numberOfPages = _imageArray.count;
        pageControl.backgroundColor = [UIColor clearColor];
        [self addSubview:pageControl];
        
        _pageControl = pageControl;
        
        //添加手势
        UITapGestureRecognizer *singleRecognizer;
        singleRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTapFrom)];
        singleRecognizer.numberOfTapsRequired = 1;
        [scrollView addGestureRecognizer:singleRecognizer];
        
    }
    
    return self;
}

-(void)handleSingleTapFrom
{
    if (_pageControl.currentPage == 3) {
        
        self.hidden = YES;
        
    }
}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (scrollView == _bigScrollView) {
        
        CGPoint offSet = scrollView.contentOffset;
        
        _pageControl.currentPage = offSet.x/(self.bounds.size.width);//计算当前的页码
        [scrollView setContentOffset:CGPointMake(self.bounds.size.width * (_pageControl.currentPage), scrollView.contentOffset.y) animated:YES];
        
    }
    
    if (scrollView.contentOffset.x == (_imageArray.count) *MainScreen_width) {
        
        self.hidden = YES;
        
    }
    
}

调用:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"everLaunched"];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];
    }
    else{
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
    }
    
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
        // 这里判断是否第一次
        
        hDisplayView *hvc = [[hDisplayView alloc]initWithFrame:CGRectMake(0, 0, MainScreen_width, MainScreen_height)];
        
        [self.window.rootViewController.view addSubview:hvc];
        
        [UIView animateWithDuration:0.25 animations:^{
            hvc.frame = CGRectMake(0, 0, MainScreen_width, MainScreen_height);
            
        }];
        
    }

然后就可以了!

比较简单,只在此记录下!



作者:稻草人11223

标签:--,self,scrollView,width,MainScreen,新手,swift,frame,pageControl
From: https://blog.51cto.com/u_13188203/7190237

相关文章

  • sql日期去掉-
    selectreplace(d_day,'-','') fromfc_sr_day_sale_ad_order;语法REPLACE(''string_replace1'',''string_replace2'',''string_replace3'')参数''string_replace1'......
  • swift--获取window
    有时候,我们需要频繁的调用界面,然后给当前页面加一个跟视图,这个时候就需要找windown,代码如下:letrootVC=UIApplication.shared.delegateas!AppDelegaterootVC.window?.rootViewController=MainVC()这样即可!仅供参考!作者:稻草人11223......
  • swift--设置app图标和启动页面
    1,如下图:选择上图步骤1,然后选择步骤2,aapp图标,尺寸上面都有,b启动图,我这是创建好的,如果没有创建,先创建c这块需要置为空接着步骤b进入下图  选择1,点击2选择上图,可以看到3已经创建成功备注1:如下图按照步骤,找到a,然后取消选中fdsfgasfa备注2:选择启动图片资源,如下图按照上......
  • ios开发之--ZHPickView输出格式不出现 +0000
    这样写就不会输出+0000了NSDate*select=[_datePickerdate];NSDateFormatter*dateFormatter=[[NSDateFormatteralloc]init];[dateFormattersetDateFormat:@"yyyy-MM-ddHH:mm:ss"];_resultString=[dateFormatterstringFromDate:select];输出+0000的原因是_......
  • ios开发之--从相机或相册选取图片,并带删除操作的demo
    多选图片的一个效果,如下图:附带有删除操作,比较方便!选取图片使用的是:ZYQAssetPickerController这个第三方类图片压缩用的是自己写的类别:UIImage+ImageSimple附一个demo的下载地址:https://github.com/hgl753951/changeTest.git具体代码就不上传了!可以直接从demo里面看!在此仅做记录用!作......
  • 科大讯飞AI大模型,太猛了!
    最近几个月,以ChatGPT为代表的AIGC迅速崛起,国内头部科技企业之间也掀起了百模大战,在众多的大模型当中我比较看好的一家就是:科大讯飞。我很早就通过科大讯飞老朋友,拿到了体验账号,简单体验了一下,谈谈我的具体感受吧。(我找科大讯飞星火大模型的一个朋友申请了一个专属申请链接:点击申......
  • API的幂等性设计
    一、背景    平台部分API需要保证接口的幂等性,防止业务频繁刷API导致资源浪费,或者不小心重发消息影响业务。二、解释    接口的幂等,指一个操作重复执行N次得到的结果与执行一次是相等的。比如在HTTP请求中,Get请求,得到的结果是相同的。但POST和PATCH的接口,每次请......
  • ios开发之--新手引导页的添加
    以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的vc里面直接写,但是那样并不是很方便,启动页里面往往会添加很多的东西,所以封装成一个单独的类,可以直接使用,即便是后期的更换,或者是其他的工程项目里面需要,直接拖过去,就可以直接使用非常方便!具体代码就不上传了,附demo的下载......
  • 写专利中需要注意的地方
    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......