iOS10 UI教程基礎窗口的內容與設置起始窗口,本章咱們從iOS10開發中UI的基礎知識開始講解,其中包括了窗口、視圖以及UI層次結構和Views的繼承等內容。一個成功的應用程序,除了高效可靠的代碼外,優秀的用戶界面設計和程序框架的科學佈局也是十分重要的。若是開發者想要設計一個界面具備吸引力並且佈局又十分科學的應用程序,那麼就須要對用戶界面的組成部分十分熟悉。swift
視圖層次結構中的最高層是窗口。窗口是UIWindow的一個實例,而UIWindow是一種特殊的UIView。它不繪製任何對象,能夠被認爲是一個空白容器。在一個應用程序中,有且只有一個窗口。窗口默認是充滿整個屏幕的。本節將講解窗口的內容、設置起始窗口以及窗口的工做方式。app
應用程序的內容主要是由視圖控制器控制,並經過視圖在窗口中進行顯示。也就是說,若是開發者想要在窗口中顯示內容,就須要將內容發送到窗口。此時須要使用UIViewController實例的rootViewController屬性,它會將視圖控制器的視圖自動設置爲窗口的內容進行顯示。圖1.1所示的內容能夠很好的說明視圖控制器、窗口以及視圖之間的合做過程。框架
圖 視圖控制器、窗口以及視圖之間的合做佈局
注意:在此圖中視圖控制器首先初始化並設置了窗口的根視圖控制器。最後,窗口顯示當前的根視圖控制器的視圖。spa
起始窗口就是應用程序在運行後,第一個顯示的窗口,起始窗口也被稱爲主窗口。在應用程序中必需要有一個起始窗口。起始窗口不多須要開發者手動設置,通常會由Xcode默認定義。若是開發者想要自定義起始窗口,能夠用如下兩種方式:一種是使用Info.plist文件進行設置,另外一種是使用代碼進行設置。設計
1.Info.plistcode
當開發者使用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文件,編寫代碼,實現起始窗口的設置。代碼以下:
此時運行程序,會看到如圖1.4所示的效果
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.3 運行效果 圖1.4 運行效果