iOS學習筆記-----ViewController

一.ViewController介紹

1.視圖控制器的概念

  • 視圖控制器就像個大管家,用來管理視圖的加載、卸載、橫屏豎屏顯示等操作。
  • 每一個界面都應該由一個控制器來管理顯示
  • UIViewController是所有視圖控制器的父類
  • iOS提供了許多內置的視圖控制器類,以支持標準的用戶界面部分,比如導航控制器 (UINavigationController),標籤欄控制器(UITabBarController),表視圖控制器 (UITableViewController)等

2.視圖控制器與視圖的關係

  • 視圖控制器是傳統的Model-View-Controller(MVC)設計模式中 —— 控制器
  • UIViewController提供了許多控制器的基本功能,因爲它是所有控制器的基類
  • 視圖控制器負責創建和管理一組視圖,它本身就提供了一個視圖,稱爲該控制器的根 視圖(view),協調管理數據和視圖之間的交互

3.ViewController根視圖的加載

4.模態視圖

模態視圖的使用
- 通過視圖控制器的presentModalViewController: 方法彈出的視圖我們都稱爲模態視圖
- 模態視圖出現的場景一般是臨時彈出的窗口,譬如:登陸窗口
- 模態視圖彈出時通過modalTransitionStyle屬性設置不同的動畫效果 - 調用 dismissModalViewControllerAnimated: 方法關閉窗口

模態視圖的原理
- 我們用 presentModalViewController: animated:打開一個控制器,是把當前控制 器的根視圖添加到window上,我們都知道根視圖控制器不做顯示
- 而且我們通過設置當前控制器的根視圖爲透明時,視圖下面顯示的時window,說明 上一個控制器的根視圖已經從window上移除掉了,那麼我們指導原理是否可以自己寫 一個方法彈出視圖,並添加我們自己想要的動畫效果

模態視圖的使用場景
1、收集用戶輸入信息
2、臨時呈現一些內容
3、臨時改變工作模式
4、顯示一個新的view層級
這幾種情形都會暫時中斷程序正常的執行流程,主要作用是收集或者顯示一些信息。

Presenting 和 Presented
- 當我們在View Controller A中模態顯示View Controller B的時候,A就充當 Presenting View Controller(彈出VC),而B就是Presented View Controller(被彈出VC)。
- 官方文檔建議這兩者之間通過delegate實現交互,因此我們在實際應用中,最好 也遵守這個原則,在被彈出的VC中定義delegate,然後在彈出VC中實現該代理, 這樣就可以比較方便的實現兩者之間的交互。

5.模態視圖的頁面傳值(使用delegate)

6.UIViewController生命週期

  • UIViewController常用方法
// 創建載入根視圖
- (void)loadView;
//視圖載入完成
- (void)viewDidLoad;
//視圖將出現在屏幕之前
- (void)viewWillAppear:(BOOL)animated;
//視圖已在屏幕上渲染完成
- (void)viewDidAppear:(BOOL)animated;
//視圖將被從屏幕上移除之前執行
- (void)viewWillDisappear:(BOOL)animated;
//視圖已經從屏幕上移除
- (void)viewDidDisappear:(BOOL)animated;
//接收到內存警告
- (void)didReceiveMemoryWarning;
  • UIViewController根視圖添加到窗口上

這裏寫圖片描述

- UIViewController根視圖從窗口上移除

這裏寫圖片描述

7.視圖控制器旋轉方向

  • 屏幕旋轉時觸發調用的方法
//屏幕將要轉到時執行
- (void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation duration: (NSTimeInterval)duration;
//屏幕轉動結束後觸發
- (void)didRotateFromInterfaceOrientation:
(UIInterfaceOrientation)fromInterfaceOrientation;
  • 屏幕旋轉時觸發調用的方法——狀態欄改變
- (void)registerDeviceOriention { 
 //註冊監聽狀態欄變化的通知
 [[NSNotificationCenter defaultCenter]
           addObserver:self
              selector:@selector(statusBarOrientationChange:)
                  name:UIApplicationDidChangeStatusBarOrientationNotification
                object:nil];
}
//通知方法
- (void)statusBarOrientationChange:(NSNotification *)notification {
       UIInterfaceOrientation oriention =
           [UIApplication sharedApplication].statusBarOrientation;
//根據oriention(旋轉方向) 改變frame等佈局信息 }

//iOS8及以上版本,statusBarOrientationChange在旋轉結束後調用
//iOS8以下版本,statusBarOrientationChange在旋轉前調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章