iOS10 UI教程基础窗口的内容与设置起始窗口
iOS10 UI教程基础窗口的内容与设置起始窗口,本章我们从iOS10开发中UI的基础知识开始讲解,其中包括了窗口、视图以及UI层次结构和Views的继承等内容。一个成功的应用程序,除了高效可靠的代码外,优秀的用户界面设计和程序框架的科学布局也是十分重要的。如果开发者想要设计一个界面具有吸引力而且布局又十分科学的应用程序,那么就需要对用户界面的组成部分十分熟悉。
iOS10 UI窗口
视图层次结构中的最高层是窗口。窗口是UIWindow的一个实例,而UIWindow是一种特殊的UIView。它不绘制任何对象,可以被认为是一个空白容器。在一个应用程序中,有且只有一个窗口。窗口默认是充满整个屏幕的。本节将讲解窗口的内容、设置起始窗口以及窗口的工作方式。
1.1.1 iOS10窗口的内容
应用程序的内容主要是由视图控制器控制,并通过视图在窗口中进行显示。也就是说,如果开发者想要在窗口中显示内容,就需要将内容发送到窗口。此时需要使用UIViewController实例的rootViewController属性,它会将视图控制器的视图自动设置为窗口的内容进行显示。图1.1所示的内容可以很好的说明视图控制器、窗口以及视图之间的合作过程。
图 视图控制器、窗口以及视图之间的合作
注意:在此图中视图控制器首先初始化并设置了窗口的根视图控制器。最后,窗口显示当前的根视图控制器的视图。
设置起始窗口
起始窗口就是应用程序在运行后,第一个显示的窗口,起始窗口也被称为主窗口。在应用程序中必须要有一个起始窗口。起始窗口很少需要开发者手动设置,一般会由Xcode默认定义。如果开发者想要自定义起始窗口,可以用以下两种方式:一种是使用Info.plist文件进行设置,另一种是使用代码进行设置。
1.Info.plist
当开发者使用Xcode的向导创建项目后,一个Storyboard(故事面板)也会被创建。如果开发者打开Info.plist文件,会看到Main Storyboard file base name关键字的值为默认的故事面板名称为Main,如图1.2所示。开发者可以修改此关键字的值对初始窗口进行自定义。
图1.2 Info.plist
2.代码设置
如果开发者将Info.plist文件中的Main storyboard file base name关键字移除,那么Xcode将无法根据这个信息去建立窗口,更别说是起始窗口了,如果运行程序,会看到如图1.3所示的效果。
对起始窗口的设置可以使用UIWindow的rootViewController属性,此属性可以用来设置窗口的根视图,它会将视图控制器的视图自动的设置成起始窗口的内容,并呈现给用户。其语法形式如下:
var rootViewController: UIViewController? { get set }
【示例1-1:Hello】以下将使用rootViewController属性设置应用程序的起始窗口。具体的操作步骤如下:
(1)创建一个Single View Application模板类型的项目,命名为Hello。
(2)打开Main.storyboard文件,从视图库中拖动View Controller视图控制器到画布中,并将新的View Controller视图控制器的视图的背景设置为绿色。
(3)在Show the Identity inspector面板中,将View Controller视图控制器的Storyboard ID设置为viewController2。
(4)移除Info.plist文件中的Main storyboard file base name键。
(5)打开AppDelegate.swift文件,编写代码,实现起始窗口的设置。代码如下:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window=UIWindow(frame:UIScreen.main.bounds) //实例化窗口
let storyboard=UIStoryboard(name: "Main", bundle: nil)
let viewController=storyboard.instantiateViewController(withIdentifier: "viewController2")
window?.rootViewController=viewController //设置起始窗口
window?.makeKeyAndVisible() //设置为主窗口并显示出来
return true
}
}
此时运行程序,会看到如图1.4所示的效果
图1.3 运行效果 图1.4 运行效果