iOS10 UI教程基础窗口的内容与设置起始窗口
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 运行效果
iOS10 UI教程基础窗口的内容与设置起始窗口
iOS10 UI教程基础窗口的内容与设置起始窗口的更多相关文章
- iOS10 UI教程基改变视图的外观与视图的可见性
iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...
- iOS10 UI教程视图的生命周期
iOS10 UI教程视图的生命周期 说到视图的生命周期一般都是指视图控制器的视图生命周期.在视图的声明周期中最主要的有8个方法,分别为loadView().viewDidLoad().viewWill ...
- iOS10 UI教程层次结构的事件
iOS10 UI教程层次结构的事件 iOS10 UI教程层次结构的事件,层次结构中存在7个事件,对于这些事件的介绍如表1-3所示.通过这些事件,可以监听视图,当视图在层次结构上发生变化时可以被拦截,也 ...
- iOS10 UI教程视图的中心位置
iOS10 UI教程视图的中心位置 center表示的是视图的中心位置属性,这个属性在相对的UI层次结构上工作,和frame类似.center属性是一个在父视图上定义视图的位置的简便方法.center ...
- iOS10 UI教程视图的边界与视图的框架
iOS10 UI教程视图的边界与视图的框架 iOS10 UI视图的边界 在视图的几何形状中我们提到了视图属性中的一部分属性可以将定义的视图绘制在屏幕上.其中典型的3个属性为边界属性.框架属性以及中心位 ...
- iOS10 UI教程视图的绘制与视图控制器和视图
iOS10 UI教程视图的绘制与视图控制器和视图 iOS10 UI视图的绘制 iOS10 UI教程视图的绘制与视图控制器和视图,在iOS中,有很多的绘图应用.这些应用大多是在UIView上进行绘制的. ...
- iOS10 UI教程视图调试
iOS10 UI教程视图调试 iOS10 UI教程视图调试,当视图很复杂的时候,层次结构就不会很简单了.Xcode可以通过视图(View)调试帮助开发者解决层次结构复杂的问题.视图调试是在Xcode ...
- iOS10 UI教程子视图和父视图UI层次结构和Views继承
iOS10 UI教程子视图和父视图UI层次结构和Views继承 iOS10 UI教程子视图和父视图UI层次结构和Views继承,本节将讲解与UI层次结构和Views继承相关的内容,其中包括子视图和父视 ...
- iOS10 UI教程视图和子视图的可见性
iOS10 UI教程视图和子视图的可见性 iOS10 UI教程视图和子视图的可见性,一个父视图可以通过clipsToBounds属性,定义子视图在边界(边界就是父视图的框架也就是父视图可以显示的范围) ...
随机推荐
- OKhttp的封装(上)
自从介绍了OKhttp3的一些基本使用之后,又偷了下懒,所以它的续篇被搁置了一段时间,现在补充. OKhttpManager.Class 请求工具类 package com.example.admi ...
- 【linux】配置SSH免密码登陆
1.输入ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 其中''里的是登陆的密码,因为要设置免密码,所以''里是什么都没有的,空格也不行 2.输入 cat ~/.ss ...
- 解决win10无法完成更新 正在撤销更改
删除Windows 更新缓存文件按Windows+X,选择“命令提示符(管理员)”:输入:net stop wuauserv,回车(此处会提醒服务停止):输入: %windir%\SoftwareDi ...
- 模拟赛1029d1
第二题[题目描述]给你两个日期,问这两个日期差了多少毫秒.[输入格式]两行,每行一个日期,日期格式保证为"YYYY-MM-DD hh:mm:ss"这种形式.第二个日期时间一定比第一 ...
- LoadRunner 思考时间与事务响应时间的区别与关系
LoadRunner 思考时间与事务响应时间的区别与关系 思考时间lr_think_time 就是一个事务要开始时思考的时间;比如 你要点击一个 登录按钮 我们都要点击这个按钮要先思考下 就是人为 ...
- Android源码-学习随笔
在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...
- Delphi的字符串、PChar和字符数组之间的转换
参考:http://my.oschina.net/kavensu/blog/193719 以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境.不同的上下文语境……有一些可能 ...
- Linux中exec()执行文件系列函数的使用说明
函数原型: 描述: exec()系列函数使用新的进程映像替换当前进程映像. 工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明: 1. 这6个函数可分为两大类: execl( ...
- rhel7初体验
Redhat7界面明显比之前的版本华丽了不少,貌似Redhat对普通用户的使用也要进行普及 可以在安装的同时修改root密码和创建新用户
- Unreal Engine4 学习笔记2 动画蒙太奇
动画蒙太奇出现的位置是在动画蓝图的动画图表和事件图表中,如下图 事件图表,可以看出在主线执行的结尾,如果is Punching 为true,则会执行一个我们自定义的Punch Event,用来播放动画 ...