[Swift实际操作]九、完整实例,6创建App欢迎界面

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

本文创建一个位于导航控制器之内的欢迎页面,该页面主要用来向用户简要介绍产品的功能。以及提供主要功能的入口。

首先选择自定义视图文件夹【CustomViews】,需要在该文件夹下,导入一款第三方类库。该类库仅包含一个类文件。

用来给视图同时添加圆角和投影效果。点击左下角的+号图标,打开选项菜单。

选择【Add Files to "DemoApp"】添加文件至项目选项。

双击类库文件【ShadowView.swift】,将文件导入到自定义视图文件夹下。

接着打开并编辑视图控制器类文件【WelcomeViewController.swift】

  1 import UIKit
  2 
  3 class WelcomeViewController: BaseViewController {
  4     
  5     override func viewDidLoad() {
  6         super.viewDidLoad()
  7 
  8         // Do any additional setup after loading the view.
  9         //隐藏导航控制器的导航条
 10         self.navigationController?.setNavigationBarHidden(true, animated: false)
 11         //并且隐藏后退按钮和关闭按钮。
 12         self.dismissBt.isHidden = true
 13         //和隐藏关闭按钮。
 14         self.backBt.isHidden = true
 15         //获得屏幕的高度
 16         let viewH = self.view.frame.size.height
 17         //获得屏幕的宽度
 18         let viewW = self.view.frame.size.width
 19         //初始化一个标签对象,
 20         //标签对象的Y轴坐标,和屏幕的高度保持固定的比例
 21         let bigTitle = UILabel(frame: CGRect(x: 0, y: viewH * 0.27, width: viewW, height: 20))
 22         //设置文字内容
 23         bigTitle.text = "欢迎来山青咏芝"
 24         //设置字体属性
 25         bigTitle.font = self.font24
 26         //设置标签的对齐方式为居中,
 27         bigTitle.textAlignment = .center
 28         //文字颜色为白色,
 29         bigTitle.textColor = .white
 30         //并将标签对象添加到根视图
 31         self.view.addSubview(bigTitle)
 32         //初始化一个段落样式
 33         let paragraphStyle = NSMutableParagraphStyle()
 34         //设置段落的行间距
 35         paragraphStyle.lineSpacing = 6
 36         //设置文字的对齐方式
 37         paragraphStyle.alignment = .center
 38         //初始化一个文字属性数组,
 39         //用来设置标签文字的字体、颜色和段落属性
 40         let attributes = [NSFontAttributeName: self.font14, NSForegroundColorAttributeName: UIColor.white, NSParagraphStyleAttributeName: paragraphStyle]
 41         //初始化一个标签对象,用来显示欢迎内容
 42         let content = "书山有路勤为径,学海无涯苦作舟!"
 43         let message = UILabel(frame: CGRect(x: 0, y: viewH * 0.36, width: viewW, height: 90))
 44         //设置标签对象的属性文字
 45         message.attributedText = NSAttributedString(string: content, attributes: attributes)
 46         //设置标签对象的行数属性
 47         message.numberOfLines = 3
 48         //然后将标签对象添加到根视图
 49         self.view.addSubview(message)
 50         
 51         //接着添加几个按钮,昨晚功能的入口
 52         //首先计算按钮X轴的坐标
 53         var posXBt = 29
 54         if(self.view.frame.size.width == 375)
 55         {
 56             posXBt = 56
 57         }
 58         //根据不同的宽度,设置不同的X轴坐标,使其具有最佳的显示效果
 59         else if(self.view.frame.size.width == 414)
 60         {
 61             posXBt = 74
 62         }
 63         //初始化一个指定显示区域的按钮对象,
 64         let btYouKe = UIButton(frame: CGRect(x: posXBt, y: Int(0.62*viewH), width: Int(viewW)-2*posXBt, height: 37))
 65         //并设置按钮的圆角属性
 66         btYouKe.layer.cornerRadius = 4
 67         //当用户点击该按钮时,允许未注册的用户浏览应用程序的部分功能
 68         btYouKe.layer.masksToBounds = true
 69         //设置按钮的边框宽度为1
 70         btYouKe.layer.borderWidth = 1
 71         //宽度颜色为白色
 72         btYouKe.layer.borderColor = UIColor.white.cgColor
 73         //设置按钮的文字大小
 74         btYouKe.titleLabel?.font = self.font14
 75         //设置按钮的文字颜色
 76         btYouKe.setTitleColor(.white, for: .normal)
 77         //设置按钮正常状态下的标题内容
 78         btYouKe.setTitle("游客访问", for: .normal)
 79         //给按钮绑定点击事件
 80         btYouKe.addTarget(self, action: #selector(WelcomeViewController.gotoVisitor(_:)), for: .touchUpInside)
 81         //并将按钮添加到根视图
 82         self.view.addSubview(btYouKe)
 83         
 84         //初始化第二个按钮对象,当用户点击该按钮时,跳转到登录页面
 85         let btLogin = UIButton(frame: CGRect(x: posXBt, y: Int(0.70*viewH), width: Int(viewW)-2*posXBt, height: 37))
 86         //设置按钮的圆角半径
 87         btLogin.layer.cornerRadius = 4
 88          //设置按钮的裁剪边界
 89         btLogin.layer.masksToBounds = true
 90          //设置按钮的边框宽度
 91         btLogin.layer.borderWidth = 1
 92          //设置按钮的边框颜色
 93         btLogin.layer.borderColor = UIColor.white.cgColor
 94         //设置按钮的文字大小
 95         btLogin.titleLabel?.font = self.font14
 96         //设置按钮的文字颜色
 97         btLogin.setTitleColor(.white, for: .normal)
 98         //设置按钮的标题
 99         btLogin.setTitle("账号登陆", for: .normal)
100         //并给按钮绑定点击事件
101         btLogin.addTarget(self, action: #selector(WelcomeViewController.gotoLogin(_:)), for: .touchUpInside)
102         //然后将按钮添加到根视图
103         self.view.addSubview(btLogin)
104         
105         //接着创建一个圆角并且拥有投影的视图对象
106         //首先计算它的Y轴坐标
107         var posY = Int(0.78*viewH)
108         if(self.view.frame.size.width == 414)
109         {
110             posY = Int(0.78*viewH)
111         }
112         //初始化一个指定显示区域的自定义视图对象
113         let bt2View = ShadowView(frame: CGRect(x: posXBt, y: posY, width: Int(viewW)-2*posXBt, height: 37))
114         //设置视图的圆角半径
115         bt2View.cornerRadius = 4.0
116         //设置视图的阴影半径
117         bt2View.shadowRadius = 2.0
118         //设置视图的投影偏移
119         bt2View.shadowOffset = CGSize(width: 0, height: 1)
120         //设置视图的阴影的颜色
121         bt2View.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 126.0/255)
122         //设置视图的背景颜色
123         bt2View.backgroundColor = .white
124         //并将视图添加到根视图
125         self.view.addSubview(bt2View)
126         
127         //初始化一个按钮对象,当点击该按钮时,将进入用户注册流程。
128         //该按钮将被添加到自定义视图
129         let btReg = UIButton(frame: CGRect(x: 0, y: 0, width: Int(viewW)-2*posXBt, height: 37))
130         //设置按钮的字体
131         btReg.titleLabel?.font = self.font14
132         //设置按钮的标题颜色
133         btReg.setTitleColor(self.fontColorRed, for: .normal)
134         //设置按钮的正常床状态下的标题
135         btReg.setTitle("账号注册", for: .normal)
136         //给按钮对象绑定点击事件,并将按钮对象添加到自定义视图
137         btReg.addTarget(self, action: #selector(WelcomeViewController.gotoRegister(_:)), for: .touchUpInside)
138         bt2View.addSubview(btReg)
139     }
140     
141     //添加一个方法,用来响应登录按钮的点击事件,
142     //由于还没有创建登录页面,所以将该方法暂时置空
143     func gotoLogin(_ sender:UIButton)
144     {
145        //self.performSegue(withIdentifier: "LoginController", sender: nil)
146     }
147     
148     //添加一个方法,用来响应游客登录按钮的点击事件
149     //由于还没有创建登录页面,所以将该方法暂时置空
150     func gotoVisitor(_ sender:UIButton)
151     {
152        //let vc = ControllerUtil.getTabController()
153        //UIApplication.shared.delegate?.window??.rootViewController = vc
154        // DataUtil.setVisitorLogin(value: true)
155     }
156     
157     //添加一个方法,用来响应注册按钮的点击事件,
158     //接着点击项目名称,对项目进行一些设置
159     //将Status Bar Style(状态栏样式):Default改为Light
160     func gotoRegister(_ sender:UIButton)
161     {
162         //self.performSegue(withIdentifier: "RegStep1Controller", sender: nil)
163     }
164     
165     override func didReceiveMemoryWarning() {
166         super.didReceiveMemoryWarning()
167         // Dispose of any resources that can be recreated.
168     }
169 }

接着点击项目名称,对项目进行一些设置:将Status Bar Style(状态栏样式):Default改为Light

接着打开Info.plist【项目属性配置文件】,在空白处鼠标右键打开菜单。

选择菜单中的【Add Row】添加行,添加一行新的选项。

点击右侧的垂直滚动条,查看下方的内容。选择【Status Bar Style】

然后在右侧的值输入框内点击,进入编辑模式。接着输入状态栏样式的值。

【Status Bar Style】:UIStatusStyleLightContent

然后打开并编辑【AppDelegate.swift】应用代理文件。

该文件包含的应用程序第一次运行时所执行的方法,

以及其他一些和应用程序运行状态相关的方法。

接着开始编写代码,创建一个导航控制器,

项目中的大部分视图控制器(页面),将由该导航控制器统一管理。

 1 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
 2 
 3         UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
 4         UINavigationBar.appearance().shadowImage = UIImage()
 5 
 6         if(DataUtil.hasShowIntro())
 7         {
 8             //曾经显示过intro页
 9             if(DataUtil.hasLogined())
10             {
11                 //曾经登陆过
12               //let vc = ControllerUtil.getTabController()
13               //window?.rootViewController = vc
14             }
15             else
16             {
17                 //从未登陆过
18                 
19               //let vc = RegStep7Controller()
20               // vc.userInfo = UserInfo()
21               //vc.userInfo.myKeMu = .SAT
22               //let navigationController = UINavigationController(rootViewController: vc)
23               // window?.rootViewController = navigationController
24                 
25                 let storyBoard = UIStoryboard(name: "RegLogin", bundle: nil)
26                 //首先初始化一个导航控制器,
27                 //并使欢迎页面作为导航作为导航控制器的初始页面
28                 //同时将导航控制器作为当前窗口的根视图控制器
29                 let vc = storyBoard.instantiateInitialViewController()
30                 let navigationController = UINavigationController(rootViewController: vc!)
31                 window?.rootViewController = navigationController
32             }
33         }
34         else
35         {
36             //进入intro页
37             let vc = ViewController(pages: [])
38             let navigationController = UINavigationController(rootViewController: vc)
39             window?.rootViewController = navigationController
40         }
41         window?.makeKeyAndVisible()
42         return true
43     }