- iOS的几个基本界面元素:UIWindow(窗口)、UIScreen(屏幕)、UIView(视图)
- 其中UIWindow和 UIView是为 iPhone 应用程序构造用户界面的可视组件。
UIWindow 为内容显示提供背景平台,UIView负责绝大部分的内容描画,并负责响应用户的交互。
Windows
-
UIWindow:显示程序内容的容器,用于管理屏幕显示的内容
(APP是通过UIWindow这个载体呈现出来的,在applicationDidFinishLaunching中创建) -
UIWindow对象是所有View的根(没有UIWindow的话UI是没办法显示的)UIView的子类
-
UIWindow 作用
- 最顶层的视图容器,包含所有要显示的视图
- 管理和协调应用程序的显示
- 传递触摸消息到程序中的view以及对象,与controller协同工作
-
一般只有一个,即使有多个也只有一个可以接受用户的点击事件,多个Window同时存在用WindowLevel来决定window的层级(z方向)
-
UIWindowLevelNormal
:默认、最低 -
UIWindowLevelStatusBar
:中间 -
UIWindowLevelAlert
:最高
-
-
rootViewController:为Window提供可视部分,必须设置
-
isKeyWindow {get} :指定程序的keyWindow,keyWindow可以接受键盘和其他非接触相关事件,只能有一个keyWindow,不会影响视图层级显示
- makeKeyAndVisible:可视并设为keyWindow,覆盖同层所有window
- makeKey:只设为keyWindow,不改变window的可见性
- becomeKey:系统自动调用以通知窗口它已成为keyWindow
- resignKey:系统自动调用以通知窗口它将要注销掉keyWindow
-
多个hidden=false的UIWindow应该显示哪个
- 对于hidden的setter方法,最终显示的以最后执行过 hidden=false 的UIWindow为准,且执行 hidden=false 之前hidden的值为true。(hidden如果是从false改为false的不算最后改变UIWindow的显示状态)
- 对于makeKeyAndVisible方法,最终显示的以最后执行过makeKeyAndVisible的UIWindow为准。
- 对于先后分别用makeKeyAndVisible方法和hidden的setter方法,还是先后分别用hidden的setter方法和makeKeyAndVisible方法,结局同样以最后改变显示状态的UIWindow为准。
-
keyWindow的生命周期
- 成为keyWindow:发送
UIWindowDidBecomeKey
通知,调用becomeKey()
方法 - 变为可见:发送
UIWindowDidBecomeVisible
方法 - 变不可见:发送
UIWindowDidBecomeHidden
方法 - 放弃成为keywindow:发送
UIWindowDidResignKey
通知,调用resignKey()
方法
- 成为keyWindow:发送
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let window = UIWindow(frame: UIScreen.main.bounds)
//po window.isHidden->true
let rootVC = RootTableViewController()
window?.rootViewController = rootVC
window?.makeKeyAndVisible()
//po window.isHidden->false
return true
}
Popovers
- 在iPad上,在App的顶部显示一个临时界面
- Popover只能作为临时视图在iPad中使用,不能在iPhone中使用
- Human Interface Guidelines
- UIPopoverPresentationController:用于管理弹窗的内容
Alerts
- 向用户显示重要信息,或让用户进行重要选择
- UIAlertController:用于展示Alerts信息
- title:Alert的标题
- message:Alerts的细节描述
- preferredStyle:Alert展现的方式
-
alert
:右图表现形式 -
actionSheet
:左图表现形式
-
- UIAlertAction:Alerts提供的选项
func showAlert() {
// Create alert controller
let alertController = UIAlertController(title: "title",
message: "message",
preferredStyle: .alert)
// Create the action buttons for the alert
let defaultAction = UIAlertAction(title: "Agree",
style: .default) { (action) in
// Respond to user selection of the action.
})
// Configure the alert controller
alertController.addAction(defaultAction)
// Present the alert controller
self.present(alertController, animated: true, completion: nil)
}
Screens
- UIScreen:iOS设备有一个主屏幕和附加屏幕
- 获取主屏幕:
class func main() -> UIScreen
- 获取所有屏幕:
class func screens() -> [UIScreen]
,第一个永远是主屏幕 - 获取外部显示器镜像:
class func mirrored() -> UIScreen
- 获取主屏幕:
- UIScreen与UIWindow的关系
- 一个UIWindow必须有一个UIScreen,否则会黑屏看不到东西
- 一个UIScreen可以有多个UIWindow,但App中只能有一个keyWindow
网友评论