swift語言已經出來一段時間了,我自己也整理了一些資料和demo,在這里和大家分享一下。分享的目的呢,就是想和大家一起研究和學習,這是我第一次寫哦,肯定會有很多不足之處,希望大家多加指點。o
一、UIView與UIWindow的關系
就像大家看見的一樣,UIView就是表示屏幕上的一塊矩形區域,它在App中占有絕對重要的地位,因為iOS中幾乎所有的可視控件都是UIView的子類。
UIView繼承自UIResponder,它是負責顯示的畫布,如果說把window比作畫框的話。我們就是不斷地在畫框上移除、更換或者疊加畫布,或者在畫布上疊加其他畫布,大小當然由繪畫者來決定了。有了畫布,我們就可以在上面任意施為了。很多簡單的東西我會把庫里面的內容貼出來,如果東西太多貼出來就不太好,朋友們自己去庫文件里面看吧。這個類在UIView.h里面哦。
UIView的功能 :
- 管理矩形區域里的內容
- 處理矩形區域中的事件
- 子視圖的管理
- 還能實現動畫
UIView的子類也具有這些功能
窗口UIWindow是一個視圖的子類。
窗口的主要功能:
一是提供一個區域來顯示視圖,二是將事件分發給視圖。一個應用通常只有一個窗口,但也不例外。window對象有以下職責:它包含了應用程序的可視化的內容·它為視圖和其他應用程序對象在觸摸事件中提供了關鍵性的作用·它與視圖控制器一起協作來呈現數據。
二、UIView的創建和屬性
1.UIView的創建
定義一個全局的UIView對象
var myView:UIView?
2.UIView的屬性方法
frame 是CGRect frame的origin是相對于父視圖的左上角原點(0,0)的位置,改變視圖的frame會改變center
center 是CGPoint 指的就是整個視圖的中心點,改變視圖的center也會改變frame
bounds 是CGRect 是告訴子視圖本視圖的原點位置(通俗的說就是,子視圖的frame的origin與父視圖的bounds的origin的差,就是子視圖相對于父視圖左上角的位置,如果結果為負,則子視圖在父視圖外)
通過addSubview:這個方法添加子類,不管誰添加它,只要越晚添加,視圖就在越上層
let view1 = UIView(frame: CGRect(x: 10,y: 50,width: 200,height: 200))
view1.center = CGPoint(x: 100, y: 100)
一個 UIView 里面可以包含許多的 Subview(其他的 UIView),而這些 Subview 彼此之間是有所謂的階層關系,這有點類似繪圖軟體中圖層的概念,下面代碼演示了幾個在管理圖層(Subview)上常用的方法。
//新增和移除SubView
myView?.removeFromSuperview()
myView?.addSubview(label)
-
在UIView中將Subview往前或是往后移動一個圖層,往前移動會覆蓋住較后層的 Subview,而往后移動則會被較上層的Subview所覆蓋。
//將Subview往前移動一個圖層(與它的前一個圖層對調位置) self.view.bringSubviewToFront(myView!) //將Subview往后移動一個圖層(與它的后一個圖層對調位置) self.view.sendSubviewToBack(myView!)
-
在UIView中使用索引Index交換兩的Subview彼此的圖層層級。
//交換兩個圖層 self.view.exchangeSubviewAtIndex(index1, withSubviewAtIndex: index2)
使用Subview的變數名稱取得它在UIView中的索引值(Index )。
//獲取index
let index = self.view.subviews.indexOf(subView名稱)替Subview加上NSInteger 的標記(Tag)好讓之后它們分辨彼此。
//加上標記
myView?.tag = 1
//通過標記得到view 返回值為UIView
let otherView = UIView().viewWithTag(1)取得UIView中所有的Subview,呼叫此方法會傳回一個 NSArray,并以由后往前的順序列出這些 Subview。
UIView().subviews
3.UIView中要注意的那些事兒
在iOS應用上實現UI就需要子類化UIView,也就是要重寫UIView的init方法。注意:兩種語言有所區別。
Objective-C只需在UIView子類中重寫必要的init方法。要初始化一個UIView框架,就要重寫initWithFrame:框架,如下所示:
@implementation SubUIView
-(id) initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self != nil) {
// ...
}
return self;
}
@end
然而Swift需要多一些步驟來重寫同一個init方法。首先,重寫使用CGRect框架作為其參數的init方法。根據UIView文檔,用Swift語言構建時,須重寫init( coder: ),但我們不需要這種方法,就用如下代碼處理。類屬性初始化所需的代碼可以在init( frame: )中執行。
class SubUIView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
// ...
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
當然,UIView的屬性和用法還有很多很多,在以后的UI資料中還會多次介紹,希望大家關注哦。
三、UIWindow的創建和屬性
1.UIWindow的創建
定義一個全局的UIWindow變量
var window:UIWindow?
2.UIWindow的屬性介紹
UIWindow() 創建一個UIWindow對象 參數為 這個UIWindow的frame,下面我細說
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
使被使用對象的主窗口顯示到屏幕的最前端,注意:! 的意思是允許window==nil 時候運行,但是window==nil程序運行崩潰 !
self.window!.makeKeyAndVisible()
設置窗口的背景顏色
self.window!.backgroundColor = UIColor.redColor();
在這里只是對UIView和UIWindow的簡單介紹,主要針對有一定OC基礎的小伙伴們,在以后的文章中還會繼續介紹,希望大家關注哦。