直接上代码(简简单单)
创建一个控制器

.h
@protocol selectDelegate <NSObject>
- (void)click;
@end
@interface XTGuidePagesViewController : UIViewController
@property (nonatomic, strong) UIButton *btnEnter;
// 初始化引导页
- (void)initWithXTGuideView:(NSArray *)images;
// 版本信息判断
- (BOOL)isShow;
@property (nonatomic, assign) id<selectDelegate> delegate;
// 创建单利类
+ (instancetype)shareXTGuideVC;
.m
- (void)initWithXTGuideView:(NSArray *)images
{UIScrollView *gui = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, s_w, s_h)];gui.pagingEnabled = YES;// 隐藏滑动条gui.showsHorizontalScrollIndicator = NO;gui.showsVerticalScrollIndicator = NO;// 取消反弹gui.bounces = NO;for (NSInteger i = 0; i < images.count; i ++) {[gui addSubview:({self.btnEnter = [UIButton buttonWithType:UIButtonTypeCustom];self.btnEnter.frame = CGRectMake(s_w * i, 0, s_w, s_h);[self.btnEnter setImage:[UIImage imageNamed:images[i]] forState:UIControlStateNormal];;self.btnEnter;})];[self.btnEnter addSubview:({UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];[btn setTitle:@"点击进入" forState:UIControlStateNormal];btn.frame = CGRectMake(s_w * i, s_h - 60, 100, 40);btn.center = CGPointMake(s_w / 2, s_h - 60);btn.backgroundColor = [UIColor lightGrayColor];[btn addTarget:self action:@selector(clickEnter) forControlEvents:UIControlEventTouchUpInside];btn;})];}gui.contentSize = CGSizeMake(s_w * images.count, 0);[self.view addSubview:gui];// pageControlself.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, s_w / 2, 30)];self.pageControl.center = CGPointMake(s_w / 2, s_h - 95);[self.view addSubview:self.pageControl];self.pageControl.numberOfPages = images.count;
}

单利

+ (instancetype)shareXTGuideVC
{static XTGuidePagesViewController *x = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{x = [[XTGuidePagesViewController alloc] init];});return x;
}
- (void)clickEnter
{if (self.delegate != nil && [self.delegate respondsToSelector:@selector(click)]) {[self.delegate click];}
}
- (BOOL)isShow
{// 读取版本信息NSUserDefaults *user = [NSUserDefaults standardUserDefaults];NSString *localVersion = [user objectForKey:VERSION_INFO_CURRENT];NSString *currentVersion =[[NSBundle mainBundle].infoDictionary objectForKey:@"CFBundleShortVersionString"];NSLog(@"L ===%@", localVersion);NSLog(@"C ===%@", currentVersion);if (localVersion == nil || ![currentVersion isEqualToString:localVersion]) {[self saveCurrentVersion];return YES;}else{return NO;}
}
// 保存版本信息
- (void)saveCurrentVersion
{NSString *version =[[NSBundle mainBundle].infoDictionary objectForKey:@"CFBundleShortVersionString"];NSUserDefaults *user = [NSUserDefaults standardUserDefaults];[user setObject:version forKey:VERSION_INFO_CURRENT];[user synchronize];
}
#pragma mark - ScrollerView Delegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{self.pageControl.currentPage = scrollView.contentOffset.x / s_w;
}

在app delegate中调用

NSArray *images = @[@"1", @"2", @"3"];if ([[[XTGuidePagesViewController alloc] init] isShow]) {self.window.rootViewController = [XTGuidePagesViewController shareXTGuideVC];[[XTGuidePagesViewController shareXTGuideVC] initWithXTGuideView:images];[XTGuidePagesViewController shareXTGuideVC].delegate = self;}else{[self click];}
- (void)click
{ViewController *vc = [[ViewController alloc] init];self.window.rootViewController = vc;[self.window.layer transitionWithAnimType:TransitionAnimTypeRamdom subType:TransitionSubtypesFromRamdom curve:TransitionCurveRamdom duration:2.0f];
}

还会持续更新, 喜欢的请关注

iOS 一步一步带你实现引导页相关推荐

  1. IOS精品源码,仿探探UIButton封装iOS提示弹框迅速引导页自定义导航栏

    1.仿 探探UI Swift ,重用机制 2.超强UIButton封装 3.一行代码集成UIPickerView,界面完全自定义 4.iOS提示弹框 5.swift UITableView / UIC ...

  2. iOS疯狂详解之启动分层引导动画

    一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷 ...

  3. 基于 Google Flutter 的 WanAndroid 客户端,支持 Android 和 iOS。包括 BLoC、RxDart 、国际化、主题色、启动页、引导页,拥有较好的项目结构比较规范的代

    flutter_wanandroid 项目地址:Sky24n/flutter_wanandroid  简介:??? 基于 Google Flutter 的 WanAndroid 客户端,支持 Andr ...

  4. 使用Hbuilder+Xcode13打包iOS app(Xcode13添加AppIcon、修改名称和增加引导页)

    本篇文章将详细展示如何在Xcode中更换appicon(图标),app名称以及使用LaunchScreen.storyboard进行引导页更换. 相关版本: xcode13 1. app图标更换 打开 ...

  5. 一步一步带你理解DDR基本原理

    一步一步带你理解DDR基本原理 一.DDR概述 二.DIMM概述 三.内存颗粒内部层级结构 1.Bank.Column.Row 2.Bank Group 3.内存颗粒容量计算 四.内存颗粒的封装方式 ...

  6. iOS最好用的引导页

    为什么80%的码农都做不了架构师?>>>    最近项目结束的时候又要改引导页,之前写的启动页改起来太麻烦了,所以就直接封装一个,功能可能还不是很完善,但是感觉用起来也比较方便,在这 ...

  7. IOS引导页拨动4张图片最后一张停三秒进入主页,页面推送

    // //  ViewController.m // // //  Created by 张艳锋 on 15/8/26. //  Copyright (c) 2015年 张艳锋. All rights ...

  8. Uni-App 简单引导页示例

    Uni-App 简单引导页示例 第一步:建3个页面文件.在pages目录下,新建index/init.vue.index/guide.vue.index/home.vue pages.json: {{ ...

  9. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、风扇叶片效果等源码...

    2019独角兽企业重金招聘Python工程师标准>>> Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android ...

最新文章

  1. 编程模式 之美 -- 抽象工厂模式
  2. 25. javacript高级程序设计-新兴的API
  3. 你知道Java的四种引用类型吗?
  4. PHP解决方案@时间戳与时间日期
  5. springmvc4 ajax 406,Spring4 MVC 中,jQuery ajax (406 Not Acceptable)
  6. c# 建立到数据源的连接 以及获取项目配置文件的属性
  7. android版多功能日历,欢迎大家测试
  8. mysql命令查看过程内容_mysql查看存储过程命令
  9. Hihocoder 1632 : Secret Poems 思维|技巧
  10. 深度学习“奠基人”特伦斯:人工智能算法框架可被科学家掌控
  11. 苹果延期中国零售商店的重新开业时间 线上商店依旧正常工作
  12. docker 配置ssh
  13. 字典的增删改查 daty 5
  14. 【angularjs】【学习心得】路由继续研究篇
  15. Majority Number III
  16. 百分百成功的ros安装教程,有手就能看懂!!!
  17. 简单好用的洗鼻子方法?
  18. python中stack.stack_Python stack
  19. Python的IDLE无法打开
  20. (自我归纳)费曼学习法

热门文章

  1. 2007年十大最帅网站CEO
  2. 黑科技|感官世界与人机交互的盛宴 --未来虚拟现实养成记
  3. flink 读取文件数据写入ElasticSearch
  4. linux下删除文件夹及下面所有文件
  5. spring security 整合sso全记录
  6. #关于新建的文本文档(记事本)没有后缀名txt的问题的解决方法
  7. 【邢不行|量化小讲堂系列45-实战篇】关于股票市值:99%投资者不知道的坑,你知道吗?
  8. 单例模式-高性能单例模式
  9. [开发技巧]·TensorFlowKeras GPU使用技巧
  10. 旅行商问题(Travelling salesman problem, TSP)