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教程基础窗口的内容与设置起始窗口的更多相关文章

  1. iOS10 UI教程基改变视图的外观与视图的可见性

    iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...

  2. iOS10 UI教程视图的生命周期

    iOS10 UI教程视图的生命周期 说到视图的生命周期一般都是指视图控制器的视图生命周期.在视图的声明周期中最主要的有8个方法,分别为loadView().viewDidLoad().viewWill ...

  3. iOS10 UI教程层次结构的事件

    iOS10 UI教程层次结构的事件 iOS10 UI教程层次结构的事件,层次结构中存在7个事件,对于这些事件的介绍如表1-3所示.通过这些事件,可以监听视图,当视图在层次结构上发生变化时可以被拦截,也 ...

  4. iOS10 UI教程视图的中心位置

    iOS10 UI教程视图的中心位置 center表示的是视图的中心位置属性,这个属性在相对的UI层次结构上工作,和frame类似.center属性是一个在父视图上定义视图的位置的简便方法.center ...

  5. iOS10 UI教程视图的边界与视图的框架

    iOS10 UI教程视图的边界与视图的框架 iOS10 UI视图的边界 在视图的几何形状中我们提到了视图属性中的一部分属性可以将定义的视图绘制在屏幕上.其中典型的3个属性为边界属性.框架属性以及中心位 ...

  6. iOS10 UI教程视图的绘制与视图控制器和视图

    iOS10 UI教程视图的绘制与视图控制器和视图 iOS10 UI视图的绘制 iOS10 UI教程视图的绘制与视图控制器和视图,在iOS中,有很多的绘图应用.这些应用大多是在UIView上进行绘制的. ...

  7. iOS10 UI教程视图调试

    iOS10 UI教程视图调试 iOS10 UI教程视图调试,当视图很复杂的时候,层次结构就不会很简单了.Xcode可以通过视图(View)调试帮助开发者解决层次结构复杂的问题.视图调试是在Xcode ...

  8. iOS10 UI教程子视图和父视图UI层次结构和Views继承

    iOS10 UI教程子视图和父视图UI层次结构和Views继承 iOS10 UI教程子视图和父视图UI层次结构和Views继承,本节将讲解与UI层次结构和Views继承相关的内容,其中包括子视图和父视 ...

  9. iOS10 UI教程视图和子视图的可见性

    iOS10 UI教程视图和子视图的可见性 iOS10 UI教程视图和子视图的可见性,一个父视图可以通过clipsToBounds属性,定义子视图在边界(边界就是父视图的框架也就是父视图可以显示的范围) ...

随机推荐

  1. 【leetcode】Binary Tree Maximum Path Sum (medium)

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  2. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

  3. Linux vmstat字段解析

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  4. Linux Shell多命令执行

    有三种: :只是顺序执行,命令之间没有任何关联,不相互影响.如  ls;date;cd /etc/ 如,创建100M的文件. && 命令之间有关系,只有前一条命令正确执行才会执行下面一 ...

  5. Mysql获取时间

    select now() 当前时间;   SELECT curdate() 当天日期; select date_sub(curdate(),interval 1 day) 前一天日期; select ...

  6. 按键使用方法(二)------verilog

    这里我们要验证一键两用的情况:点击与长击,单击与双击 代码: /********************************Copyright*************************** ...

  7. php 会话控制

    会话控制 HTTP协议,在TCP协议基础上的HTTP协议称为无状态协议 SESSION COOKIE SESSION特点:1.存储在服务器.2.每个使用者都会生成一个SESSION.3.有默认的过期时 ...

  8. HTML5 – 2.新元素

    figcaption 定义和用法 <figcaption> 标签定义 figure 元素的标题(caption). "figcaption" 元素应该被置于 " ...

  9. SQL exists( select 1 from

    use UnlockIndustry select * from Info_Coordinate as A join Info_Employee on A.EmployeeId=Info_Employ ...

  10. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...