UIKit
是用来,构建和管理iOS或tvOS应用程序的图形化,事件驱动的用户界面.
OverView
UIKit框架为您的iOS或tvOS应用程序提供所需的基础架构。 它提供了用于实现界面的窗口和视图体系结构,用于向应用程序提供多点触控和其他类型输入的事件处理基础结构,以及管理用户,系统和应用程序之间交互所需的主运行循环。 该框架提供的其他功能包括动画支持,文档支持,绘图和打印支持,关于当前设备的信息,文本管理和显示,搜索支持,可访问性支持,应用程序扩展支持和资源管理。
Improtent:
除非另有说明,否则只能从您的应用的主线程或主调度队列中使用UIKit类。 此限制特别适用于从UIResponder派生的类或涉及以任何方式操纵应用程序用户界面的类。
About App Development with UIKit
了解UIKit和Xcode为iOS和tvOS应用程序提供的基本支持。
Overview
UIKit框架提供了构建适用于iOS和tvOS的应用程序所需的核心对象。 您可以使用这些对象在屏幕上显示您的内容,与该内容交互并管理与系统的交互。 应用程序依赖于UIKit的基本行为,并且UIKit提供了许多方法让您自定义该行为以满足您的特定需求。
当您构建应用程序时,Xcode会编译您的源文件并为您的项目创建一个应用程序包。 应用程序包是一个结构化目录,其中包含与应用程序关联的代码和资源。 资源包括支持您的代码的图片资源,故事板文件,字符串文件和应用程序元数据。 应用程序包的结构很重要,但Xcode知道您的资源需要去哪里,所以现在不要担心。
所需资源
每个UIKit应用程序都需要具有以下资源:
App icons
Launch screen storyboard
系统会在主屏幕,设置中以及将您的应用与其他应用区分开的任何位置显示您的应用图标。 由于它在多个地方以及多个设备上使用,因此您可以在Xcode项目的AppIcon图像资产中提供多个版本的应用程序图标,如图2所示。您的应用程序图标应该与众不同,以帮助用户快速识别您的应用程序 主屏幕。 但是,您可能会改变图标的细节以适应您必须提供的不同图像尺寸。
LaunchScreen.storyboard文件包含应用程序的初始用户界面,它可以是启动画面或实际界面的简化版本。 当用户点击你的应用程序的图标时,系统会立即显示你的启动屏幕,让你的应用程序正在启动的用户。 启动屏幕在自行初始化时还为您的应用提供封面。 当您的应用程序准备就绪后,系统将隐藏启动屏幕并显示您的应用程序的实际界面。
必需的应用程序元数据
系统从应用程序包中的信息属性列表(Info.plist)文件中导出关于您的应用程序配置和功能的信息。 Xcode为每个新项目模板提供了此文件的预配置版本,但您可能需要在某个时候修改此文件。 例如,如果您的应用程序依赖于特定的硬件或使用特定的系统框架,则可能需要将与这些功能相关的信息添加到此文件中。
您可以对Info.plist文件进行的一项常见修改是声明您的应用程序的硬件和软件要求。 这些要求是您如何向系统传达您的应用程序需要运行的方式。 例如,导航应用程序可能需要GPS硬件的存在才能提供转由转向的指示,如图3所示.App Store阻止将应用程序安装在不符合应用程序要求的设备上。
UIKit应用程序的代码结构
UIKit提供了许多应用程序的核心对象,包括与系统交互的应用程序,运行应用程序的主事件循环以及在屏幕上显示内容。 您可以按原样使用大部分这些对象,也可以仅使用较小的修改。 知道要修改哪些对象以及何时修改它们对于实现您的应用程序至关重要。
UIKit应用程序的结构基于模型 - 视图 - 控制器(MVC)设计模式,其中对象按其用途划分。 模型对象管理应用程序的数据和业务逻辑。 查看对象提供了数据的可视化表示。 控制器对象充当模型和视图对象之间的桥梁,在适当的时候在它们之间移动数据。
de856a69-d510-42c4-8620-b612bc60a009.png图4表示一个UIKit应用程序的相当典型的结构。 您提供了表示应用程序数据结构的模型对象。 UIKit提供了大部分视图对象,但您可以根据需要为数据定义自定义视图。 协调数据对象和UIKit视图之间的数据交换是您的视图控制器和应用程序委托对象。
UIKit和Foundation框架提供了许多用于定义应用模型对象的基本类型。 UIKit提供了一个UIDocument对象,用于组织属于基于磁盘的文件中的数据结构。 Foundation框架定义了表示字符串,数字,数组和其他数据类型的基本对象。 Swift标准库提供了许多基础框架中可用的相同类型。
UIKit提供了应用程序的控制器和视图图层中的大部分对象。 具体来说,UIKit定义了UIView类,它通常负责在屏幕上显示你的内容。 (您也可以使用Metal和其他系统框架直接在屏幕上呈现内容。)UIApplication对象运行您的应用程序的主事件循环并管理应用程序的整个生命周期。
App Structure
UIKit管理您的应用与系统的交互,并为您提供管理应用数据和资源的类。
Core App
管理你的应用的数据模型及其与系统的交互。
Application
管理应用程序的生命周期
了解应用程序委托如何管理应用程序的高级行为。
OverView
284200b0-5797-4f5f-9353-da25dd873fed.pngUIKit应用程序总是处于五种状态之一,如图1所示.App开始不运行。 当用户明确启动应用程序时,应用程序在进入活动状态之前会短暂地移至非活动状态。 (一个活跃的应用程序出现在屏幕上,被称为前台应用程序。)退出一个活动的应用程序会将其移出屏幕并进入后台状态,在此状态下,系统会在很短的时间后暂停该状态。 系统可以自行决定终止已暂停的应用程序,并将其恢复到未运行状态。
你的应用程序的当前状态定义了可用的系统资源。 由于活动应用程序在屏幕上可见并且必须响应用户交互,因此它们在使用系统资源时具有优先权。 后台应用程序在屏幕上不可见,因此对系统资源的访问更加有限,并获得有限的执行时间。
管理生命周期事件
当您的应用程序从一种状态转换到另一种状态时,UIKit会通知您的应用程序委托对象 - 符合UIApplicationDelegate协议的对象。 使用您的应用程序委托来修改您的应用程序的行为以匹配其新状态。 例如,从非运行状态转移到非活动状态时,处理准备运行应用程序所需的启动时任务。
系统通知您的 App delegate 有关以下转换:
launch: 您的应用程序从未运行状态转换为非活动状态或后台状态。 使用此转换来准备您的应用程序运行;
UIKit执行大部分实际启动应用程序并准备运行的工作。 UIKit创建用于管理您的应用程序的UIApplication对象,加载您的初始视图和视图控制器,并启动您的应用程序的主事件循环。 UIKit还会创建您的应用程序委托 - 一个符合UIApplicationDelegate协议的对象。 新的Xcode项目包括一个应用程序委托对象,您可以自定义并使用它来处理特定于启动的任务。 在启动时使用该对象执行以下部分或全部任务:
首次启动应用时,请执行所需的任何一次性设置。
初始化您的应用程序的数据结构。
配置您的用户界面的视图和视图控制器。
验证您的应用的内容。
启动您的应用程序需要运行的任何任务。 例如,连接到您需要的网络资源。
应用程序委托有两种方法(如清单1所示),它们在启动时独占地调用。 使用应用程序:willFinishLaunchingWithOptions:方法初始化您的应用程序的数据结构并执行一次性设置任务。 (在调用该方法时,UIKit已经从storyboard文件中加载了您的应用的默认用户界面。)使用application:didFinishLaunchingWithOptions:方法来验证您的内容,更新您的应用的默认用户界面并启动任何任务。
清单1 应用程序初始化方法
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
willFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
// Override point for customization after app launch,
// but before state restoration.
return true
}
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for app customization
// Perform final customization of your user interface. }
//…
}
您的应用程序的用户界面保持隐藏状态,直到您的两个初始化方法都将控制权返回给UIKit。 仅当您的应用程序无法正常运行时才能同步执行任务。 例如,您必须同步配置您的用户界面。 在后台调度队列上异步启动所有其他任务。 特别是,在后台启动所有网络请求,并在检索数据时让用户执行其他任务。
用户通过点击主屏幕上的图标启动您的应用程序,但系统也可以启动您的应用程序以响应特定事件。 当系统启动您的应用程序时,它会在传递给您的应用程序的字典对象中提供启动的原因:willFinishLaunchingWithOptions:和application:didFinishLaunchingWithOptions:methods。
使用启动选项字典中的键来了解您的应用程序启动的原因并提供适当的响应。 字典应该只包含你期望在那里的键。 例如,如果您的应用程序在后台处理位置更新,则当新的位置事件可用时,该字典将包含UIApplicationLaunchOptionsLocationKey键。 清单2显示了如何查找此键,配置位置管理器对象以及启动位置服务,这些服务将事件传递给位置管理器的委托。
确定您的应用程序启动的原因
清单2 在发布时响应位置事件
class AppDelegate: UIResponder, UIApplicationDelegate,
CLLocationManagerDelegate {
let locationManager = CLLocationManager()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// If launched because of new location data,
// start the visits service right away.
if let keys = launchOptions?.keys {
if keys.contains(.location) {
locationManager.delegate = self
locationManager.startMonitoringVisits()
}
}
return true
}
// other methods…
}
有关启动选项密钥的列表以及有关如何处理它们的信息,请参阅https://developer.apple.com/documentation/uikit/uiapplicationlaunchoptionskey?language=objc
Activation
Deactivation
Background execution
Termination
网友评论