Swift基礎之UIView與UIWindow

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基礎的小伙伴們,在以后的文章中還會繼續介紹,希望大家關注哦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容