UIApplication、UIView、UIWindow、UIScreen、UIViewController、UINavigationController 介绍

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44954803

1、前言

我们先来看一下这几个概念的类继承关系图:

iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间接继承的。

2、应用程序(UIApplication)

一个 UIApplication 对象就代表一个应用程序。一个 iOS 程序启动后创建的第一个对象就是 UIApplication 对象(只有一个),而且是单例的。如有需要,可以通过如下代码获取该单例对象:

let app = UIApplication.sharedApplication()

利用 UIApplication 对象,可以进行一些应用级别的操作。

(1)设置应用图标右上角的红色提醒数字

app.applicationIconBadgeNumber = 3

(2)设置联网指示器的可见性

app.networkActivityIndicatorVisible = true

(3)管理状态栏

app.setStatusBarStyle(UIStatusBarStyle.Default, animated: true)
app.setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)

(4)openURL 方法

// 发信息
app.openURL(NSURL(string: "sms://10010")!)

// 发邮件
app.openURL(NSURL(string: "mailto://[email protected]")!)

// 打开一个网页
app.openURL(NSURL(string: "http://blog.csdn.net/jinnchang")!)

// 跳转到 AppStore
app.openURL(NSURL(string: "https://itunes.apple.com/cn/app/qq/id444934666?mt=8")!)

Github 上关于 UIApplication 的示例:UIApplicationSample

3、视图(UIView)

UIView 的实例即视图,负责在屏幕上定义一个矩形区域,同时处理该区域的绘制和触屏事件。视图可以嵌套,也可以像图层一样进行叠加。

//
//  ViewController.swift
//  UIViewControllerSample
//
//  Created by jinnchang on 15/4/8.
//  Copyright (c) 2015年 Jinn Chang. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // 添加一个黑色 view
        let view = UIView(frame: CGRectMake(40, 40, self.view.frame.size.width - 80, self.view.frame.size.height - 80))
        view.backgroundColor = UIColor.blackColor()

        self.view.addSubview(view)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

4、窗口(UIWindow)

UIWindow 管理和协调应用程序的显示,虽然 UIWindow 继承自 UIView,但通常不直接操作 UIWindow 对象中与视图相关的属性变量。

iOS 程序启动完毕后,创建的第一个视图控件就是 UIWindow(创建的第一个对象是 UIApplication),接着创建控制器的 view,最后将控制器的 view 添加到 window 上,于是控制器的 view 就显示在屏幕上了。一般情况下,应用程序只有一个 UIWindow 对象,即使有多个,也只有一个 UIWindow 可以接受到用户的触屏事件。

(1)自定义一个 myWindow

let myWindow = UIWindow(frame: UIScreen.mainScreen().bounds)

(2)设置 myWindow 为主窗口并显示出来(view 不能凭空显示,必须依赖 window)

myWindow.makeKeyAndVisible()

UIWindow 和 UIView  之间的关系也可以想象成这样一个场景:首先会有一个空的画框(UIWindow),我们在画框上放置一块画布(UIView),然后可以在这个画布上进行绘画。画布上可能会被画上各种元素,例如
UILabel、UIButton 等,这些元素其实也是一个又一个 UIView,它们会有一个层级关系管理,有点类似于 Photoshop 中图层的概念,层级高的元素会覆盖住层级低的元素,从而导致层级低的元素被部分或完全遮挡。

5、屏幕(UIScreen)

通过这个类我们可以获取一些关于屏幕的信息,通常用来获取屏幕尺寸。

// 返回带有状态栏的 Rect
let screenBounds = UIScreen.mainScreen().bounds

// 返回不含状态栏的 Rect
let viewBounds = UIScreen.mainScreen().applicationFrame

6、视图控制器(UIViewController)

视图控制器管理 UIView 实例的生命周期及资源的加载与释放、处理由于设备旋转导致的界面旋转、以及和用于构建复杂用户界面的高级导航对象进行交互。

下图展示了 UIView、UIWindow、UIScreen、UIViewController 之间的层级关系:

想要完整了解 UIViewController 用法可以参考 Github 上关于 UIViewController 的示例:UIViewControllerSample

7、导航控制器(UINavigationController)

在介绍 UINavigationController 之前先介绍另一个概念:容器(Container)。一个 app 可能有很多的 UIViewController 组成,这时需要一个容器来对这些 UIViewController 进行管理。大部分的容器也是一个 UIViewController,如 UINavigationController、UITabBarController,也有少数不是 UIViewController,比如
UIPopoverController 等。

UINavigationController 继承自 UIViewController,通常我们新建的工程是直接将视图控制器添加到 window 上的,如果添加了 navigation 以后就多了一层。

//
//  AppDelegate.swift
//  UINavigationControllerSample
//
//  Created by jinnchang on 15/4/8.
//  Copyright (c) 2015年 Jinn Chang. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        // 初始化 window
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window?.backgroundColor = UIColor.grayColor()

        // 初始化 navigationController
        let viewController = ViewController(nibName: nil, bundle: nil)
        let navigationController = UINavigationController(rootViewController: viewController)

        // 设置 window 的根控制器为 navigationController
        window?.rootViewController = navigationController

        // 设置 window 为主窗口并显示出来
        window?.makeKeyAndVisible()

        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

}

以下是 UINavigationController 的结构图:

通过 UINavigationController 进行视图切换的两种常用方式:

(1)presentViewController

// 向上弹出视图
let firstViewController = FirstViewController(nibName: nil, bundle: nil)
self.navigationController?.presentViewController(firstViewController, animated: true, completion: nil)
// 退出视图
self.dismissViewControllerAnimated(true, completion: nil)

(2)pushViewController

// 向左推出视图
let secondViewController = SecondViewController(nibName: nil, bundle: nil)
self.navigationController?.pushViewController(secondViewController, animated: true);
// 退出视图
self.navigationController?.popToRootViewControllerAnimated(true)

想要完整了解 UINavigationController 用法可以参考 Github 上关于
UINavigationController 的示例:UINavigationControllerSample

8、结语

文章最后更新时间:2015年4月9日09:17:44。参考资料如下:

About View Controllers

http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html

http://www.cnblogs.com/wendingding/p/3766347.html

时间: 2024-10-03 23:57:04

UIApplication、UIView、UIWindow、UIScreen、UIViewController、UINavigationController 介绍的相关文章

info.plist、pch和四大对象(UIApplication、UIApplicationDelegate、UIWindow、UIViewController)

本文目录 1.程序配置文件info.plist,全局头文件pch 2.应用程序对象UIApplication介绍 3.UIApplicationDelegate介绍,程序启动过程 4.UIWindow对象 5.程序界面显示出来的过程 6.总结程序启动完整过程 -1.程序配置文件info.plist,全局头文件pch 1.程序配置文件info.plist,全局头文件pch 回到顶部 工程的配置中Info选项里面的内容实际上是info.plist文件里面的内容的拷贝,info.plist里面存放了许

iOS阶段学习第30天笔记(UIViewController—UINavigationController)

iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构,在UI方便的 具体表现为View加ViewController.所以UIViewController是iOS应用当中非常常用而且很重要的一个类;一般使用都是自己写 一个类继承UIViewController这个类.在UIViewController里面有一个很重要的属性那就是View,也就 是这个C

UIApplication 和 UIWindow

Info.Plist文件 该文件对工程做一些运行期的配置,非常重要,不能删除. 常见属性 Pch文件 项目的Suportting files文件夹下面有一个“工程名-Prefix.pch”文件,也是一个头文件 Pch文件中的内容可以被项目中的其他所有源文件共享和访问 一般在pch文件中定义一些全局的宏 在pch文件中添加下列预处理指令,然后在项目中使用log(...)来输出日志信息,就可以在发布应用的时候,一次行将NSLog语句移除(在调试模式下,才有定义DEBUG) UIApplication

UIView UIWindow

一.window 简介 window 是窗口,每个app都要借助window将内容展现给用户看. 在iOS中,通常使用UIWIndow类来表示窗口,通常一个应用程序只创建一个UIWIndow对象. 二.创建UIWindow // 1.创建window对象 self.window = [[[UIWindow alloc] init] autorelease]; // 2.设置window的位置和大小,(window大小和屏幕一样大,位置为0,0) self.window.frame = [UISc

UI-UIView--UIViewController

-------------UIView------------- 1.创建 UIView *view = [[UIView alloc]init]; 2.设置位置 view.frame = CGRectMake(10, 40, 100, 200); 3.显示 [self.window addSubview:view]; 4.背景色 view.backgroundColor = [UIColor blueColor]; 5.设置中心  当中心改变的时候,视图的位置会随着中心的改变而改变.大小不变

UIScreen, UIWindow

模仿书上或网上的例子,每次最开始就是 在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 加: self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = [[WXC

iOS学习笔记(2)— UIView用户事件响应

iOS学习笔记(2)— UIView用户事件响应 UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相关的属性和方法. 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除.也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件. multipleTouchEnabled  默认是NO,如果设置为YE

UIView用户事件响应

UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相关的属性和方法. 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除.也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件. multipleTouchEnabled  默认是NO,如果设置为YES则支持多点触碰. exclusiveTouch 

关于UIView用户交互相关的属性和方法

UIView除了负责展示内容给用户外还负责响应用户事件 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除.也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件. multipleTouchEnabled  默认是NO,如果设置为YES则支持多点触碰. exclusiveTouch 默认是NO,如果设置为YES则当前UIView会独占