UIView控件只是一個矩形的空白區域,并沒有任何內容。iOS應用的其他UI控件都繼承了UIView,這些UI控件都是在UIView提供的空白區域上繪制外觀。
基于UI控件的實現原理,開發者完全可以開發出項目定制的控件——當iOS系統提供的UI控件不足以滿足項目需要時,開發者可以通過繼承UIView來派生自定義控件。
當開發者打算派生自己的UI控件時,首先定義一個繼承View基類的子類,然后重寫View類的一個或多個方法,通常可以被用戶重寫的方法如下。
?initWithFrame::前面已經見到,程序創建UI控件時常常會調用該方法執行初始化,因此,如果你需要對UI控件執行一些額外的初始化,即可通過重寫該方法來實現。
?initWithCoder::程序通過在nib文件中加載完該控件后會自動調用該方法。因此,如果程序需要在nib文件中加載該控件后執行自定義初始化,則可通過重寫該方法來實現。
?drawRect::如果程序需要自行繪制該控件的內容,則可通過重寫該方法來實現。
?layoutSubviews:如果程序需要對該控件所包含的子控件布局進行更精確的控制,可通過重寫該方法來實現。
?didAddSubview::當該控件添加子控件完成時,將會激發該方法。
?willRemoveSubview::當該控件將要刪除子控件時,將會激發該方法。
?willMoveToSuperview::當該控件將要添加到其父控件中時,將會激發該方法。
?didMoveToSuperview:當把該控件添加到父控件完成時,將會激發該方法。
?willMoveToWindow::當該控件將要添加到窗口中時,將會激發該方法。
?didMoveToWindow:當把該控件添加到窗口完成時,將會激發該方法。
?touchesBegan:withEvent::當用戶手指開始觸碰該控件時,將會激發該方法。
?touchesMoved:withEvent::當用戶手指在該控件上移動時,將會激發該方法。
?touchesEnded:withEvent::當用戶手指結束觸碰該控件時,將會激發該方法。
?touchesCancelled:withEvent::用戶取消觸碰該控件時,將會激發該方法。
當需要開發自定義View時,開發者并不需要重寫上面列出的所有方法,而是根據業務需要重寫上面的部分方法。