[Swift实际操作]九、完整实例-(6)创建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 }