1.自定義視圖
- 自定義視圖:系統標準UI之外,自己組合而出的新的視圖。
在實際開發中,我們經常需要自己定義視圖,積累自己的代碼庫。自己封裝的視圖,能像系統提供的UI控件一樣用于多個項目中,這樣可以提高我們的開發效率。
自定義視圖的步驟:
根據需求的不同,自定義視圖繼承的類也會不同。一般自定義的視圖會繼承自UIView。以下是自定義視圖的要點:
- 創建一個UIView子類
- 在類的初始化方法中添加子視圖
- 類的.h文件提供了一些接口(方法),便于外界操作子視圖。
示例1: 自定義label-textField視圖
假設我們使用LTView類代表label-textField視圖,我們可以創建一個LTView類繼承于UIView。將UIView作為一個容器,在LTView的初始化方法中創建并添加label和textField。
將Label和TextField封裝到LTView中,在一定程度上簡化了我們的代碼。在自定義LTView中我們使用了復合設計模式。
復合設計模式:A類中,使用B類(或者更多類)作為自己的成員(實例變量)。
iOS中復合是特別常見的設計模式,iOS新控件往往都是用已有的控件組合成的。
2. 視圖控制器
UIViewController : 視圖控制器,控制視圖顯示,響應事件。分擔AppDelegate的工作。實現模塊獨立,提高復用性。
視圖控制器的功能:(1)控制視圖大小變換、布局視圖、響應事件。(2)監測以及處理內存警告。(3)檢測以及處理屏幕旋轉。(4)檢測視圖的切換。
自定義視圖控制器:
1> 定義UIViewController的子類
2> 創建視圖控制器對象,作為window的根視圖控制器
3> 在viewDidLoad中使用創建好的對象view
3. 視圖控制器指定自定義的view
UIViewController自帶一個空的view,與需求不符合。視圖控制器只負責控制視圖顯示和響應事件。
自定義View
1> 自定義視圖類繼承于UIView,在初始化方法中添加子視圖控件。
2> 重寫controller的loadView方法。創建自定義視圖對象,并指定為controller的view。
3> 將子視圖控件對象設置為自定義視圖類的屬性,在viewDidLoad方法中進行設置:添加 action、設置delegate等。
4> 在controller中添加按鈕點擊事件的實現和代理方法的實現。
4. MVC概述
MVC是一個框架級的設計模式。M是Model,主要用于建立數據模型(即數據的結構)。V是View,我們看到的所有控件都是view,view的主要功能是展示數據。C是控制器,主要是控制M和V之間的通信。
5. 檢測屏幕旋轉
視圖控制器本身能檢測到屏幕的旋轉,如果要處理屏幕旋轉,需要重寫幾個方法:
(1)supportedInterfaceOrientations (設置設備支持旋轉的方向)
(2)willRotateToInterfaceOrientation:duration:(暫停音樂、關閉視圖交互等)
(3)willAnimateRotationToInterfaceOrientation:duration:(添加自定義動畫等)
(4)didRotateFromInterfaceOrientation:(播放音樂、打開視圖交互等)。
視圖處理
視圖控制器會自動調整view的大小以適應屏幕的旋轉,bounds被修改,觸發view的layoutSubviews方法。view重寫layoutSubviews方法,根據設備方向重新布局。
[UIApplication shareApplication].statusBarOrientation 方法可以提供設備的當前方向。
6. 處理內存警告
控制器能監測內存警告,以便我們避免內存不夠引起的crash。在定義的controller子類中重寫didReceiveMemoryWarning方法。釋放暫時不使用的資源。(數據對象、圖像)
7. 容器視圖控制器
常用方法:
self.view顯示:viewWillAppear:和viewDidAppear:
self.view消失:viewWillDisappear:和viewDidDisappear:
self.view添加到父視圖上時,之行appear方法;當self.view從父視圖上移除時,執行disappear方法。