swift3.0 项目引导页
项目引导页并不难,使用 UICollectionView就可以完成,
1.首先获取应用程序的版本号,并存入本地,每次有新版本号,和存入本地的版本号,相比较
fileprivate func setupRootViewController() {
window = UIWindow(frame: UIScreen.main.bounds)
print(isNewVersion())
window?.rootViewController = isNewVersion() ? NewFeatureController() : UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
if isNewVersion() {
//此处应该加载用户操作教程
}else {
//此处加载广告页面
loadingAdvertisingPages()
}
window?.makeKeyAndVisible()
}
/**
判断是否是新版本
*/
fileprivate func isNewVersion() -> Bool {
// 获取当前的版本号
let versionString = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
let currentVersion = Double(versionString)!
// 获取到之前的版本号
let versionKey = "curVersion"
let sandboxVersion = UserDefaults.standard.double(forKey: versionKey)
// 保存当前版本号
UserDefaults.standard.set(currentVersion, forKey: versionKey)
UserDefaults.standard.synchronize()
// 对比
return currentVersion > sandboxVersion
}
新建一个继承 UICollectionViewController 的类,具体的代码如下
import UIKit
private let reuseIdentifier = "Cell"
class NewFeatureController: UICollectionViewController {
fileprivate let itemCount =
fileprivate var layout = UICollectionViewFlowLayout()
//MARK: - 系统回调函数
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView!.register(NewFeatureCell.self, forCellWithReuseIdentifier: reuseIdentifier)
self.collectionView?.isPagingEnabled = true
self.collectionView?.bounces = false
self.collectionView?.showsHorizontalScrollIndicator = false
self.collectionView?.backgroundColor = UIColor.white
layout.scrollDirection = UICollectionViewScrollDirection.horizontal
layout.minimumLineSpacing =
layout.minimumInteritemSpacing =
layout.itemSize = UIScreen.main.bounds.size
}
init() {
super.init(collectionViewLayout:layout)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
// MARK: UICollectionViewDataSource
extension NewFeatureController {
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return itemCount
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! NewFeatureCell
cell.imageIndex = String(indexPath.item)
cell.setIndexPath(indexPath: indexPath, count: itemCount)
return cell
}
}
import UIKit
class NewFeatureCell: UICollectionViewCell {
//MARK: - 懒加载属性
fileprivate lazy var imageView: UIImageView = UIImageView()
fileprivate lazy var startButton: UIButton = UIButton()
var imageName: String?
var imageIndex: String? {
didSet {
let screenH = UIScreen.main.bounds.height
//加载不同的图片
if screenH == {
imageName = imageIndex!+"welcome1136"
}else if screenH == {
imageName = imageIndex!+"welcome1334"
}else {
imageName = imageIndex!+"welcome1472"
}
imageView.image = UIImage(named: imageName!)
}
}
//MARK: - 构造函数
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//MARK: - 设置 UI界面相关
extension NewFeatureCell {
fileprivate func setupUI() {
startButton.setTitle("开始全新体验", for: .normal)
startButton.setTitleColor(UIColor.orange, for: .normal)
startButton.sizeToFit()
startButton.isHidden = true
startButton.addTarget(self, action: #selector(NewFeatureCell.startBtnClick), for: .touchUpInside)
self.contentView .addSubview(imageView)
self.contentView.addSubview(startButton)
}
//布局子控件的 frame
override func layoutSubviews() {
super.layoutSubviews()
imageView.frame = self.bounds
startButton.center = CGPoint(x: self.bounds.width * 0.5, y: self.bounds.height * 0.9)
}
func setIndexPath(indexPath: IndexPath, count: Int) {
if indexPath.item == count- {
startButton.isHidden = false
}else {
startButton.isHidden = true
}
}
}
//MARK: - 事件的点击
extension NewFeatureCell {
@objc fileprivate func startBtnClick() {
UIApplication.shared.keyWindow?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
}
}
swift3.0 项目引导页的更多相关文章
- Swift3.0项目学习: 创建撰写按钮
import UIKit class PSMainViewController: UITabBarController { override func viewDidLoad() { super.vi ...
- 用Flutter开发的跨平台项目,完美运行在Android和IOS上,Material简洁风格,包括启动页、引导页、注册、登录、首页、体系、公众号、导航、项目,还有漂亮的妹子图库,运行极度流畅,结构清晰,代码规范,值得拥有
Flutter学习资源汇总持续更新中...... Flutter官方网站 Flutter中文网 wendux的Flutter实战 Flutter官方exampleflutter_gallery 阿里巴 ...
- swift3.0 创建一个app引导页面
swift毕竟不像是oc ,第三方的框架很多,更何况是3.0,自己动手写了个引导页面,看得上我代码的麻友可以拿去用 引导页面有三个部分构成,scrollview用语切换引导视图,pageControl ...
- Android项目实战(三):实现第一次进入软件的引导页
最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_Vie ...
- android 项目学习随笔二(引导页 )
1.引导页 1.定义灰色.红色圆点的shape XML文件 2.定义布局文件,利用相对布局文件定位,利用线性布局加载灰色圆点,imageview加载红色圆点 3.android.support.v4. ...
- Android 引导页公共方法LeaderPager
SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 引导页是我们开发app很常用的功 ...
- Xamarin.Android之引导页的简单制作
0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...
- iOS 引导页组件 HcdGuideView
HcdGuideView HcdGuideView让你为你的app添加一个漂亮的启动页变得简单. 要求 Xcode 6 or higher iOS 7.0 or higher ARC 安装方法 手动安 ...
- iOS最好用的引导页
最近项目结束的时候又要改引导页,之前写的启动页改起来太麻烦了,所以就直接封装一个,功能可能还不是很完善,但是感觉用起来也比较方便,在这里和大家分享一下. 这是github的下载地址:https://g ...
随机推荐
- 学习Tomcat动态加载JSP的Class类
今天在修改项目一个JSP文件时,突然想到Tomat是怎么实现动态实时加载JSP编译后的class类的? 查了半天资料,看了很多文章,终于明白是怎么回事了:ClassLoader,当tomcat发现js ...
- ubuntu14.04 设置默认使用root用户登录
首先修改/etc/lightdm/lightdm.conf,设置autologin-user=root 但是此时直接重启,会报如下的错误: 解决办法: 使用命令: vim /root/.profile ...
- sql基础内容2
-- day16课程内容 --CREATE DATABASE day16;USE day16; -- *************一.数据约束********************------ 1.1 ...
- ubuntu在recovery模式下更改用户密码
http://www.jb51.net/os/Ubuntu/164636.html 1, restart 2, Hold down shift key / press and hold 3, sele ...
- 原生及jq方式使用ajax
1.原生js实现Ajax方法: // 封装ajax()方法 function ajax(url,fnSucc,fnFaild){ //1.创建Ajax 对象 if(window.XMLHttpRequ ...
- zend studio 10.6.2破解和汉化
破解文件下载地址 http://dldx.csdn.net/fd.php?i=881874911175745&s=b2f091d89f675e30c36dcc00c4cd2702 下载破解 ...
- ABP启动流程分析
添加服务与注册中间件 public IServiceProvider ConfigureServices(IServiceCollection services) { // Configure Abp ...
- GTK学习笔记之Linux下Gtk环境搭建
下面介绍下Ubuntu 环境下具体的安装过程: 1.配置安装gcc/g++/gdb/make 等基本编程工具(必须装好) 刚装好的Ubuntu系统中已经有GCC了,但是这个GCC几乎什么文件都不能编译 ...
- Unity3d 5.3.5使用sqlite3
http://blog.csdn.net/glunoy/article/details/52037598 国内讲的乱七八糟,更有故作神秘提供Mono.Data.Sqlite.dll System.Da ...
- php curl采集,服务器gzip压缩返回数据怎么办
一般服务器不会胡乱返回gzip压缩的数据,一般是客户端请求的头部里包含你浏览器能接受的压缩方式, Accept-Encoding:gzip,deflate,sdch 这里是gzip .deflat ...