UIView

1、概念

UIView表示 屏幕上的一塊矩形區(qū)域傍睹,它在app占有絕對重要的地位拾稳,因為ios中幾乎所有可視化控件都是UIView的子類熊赖,負責渲染區(qū)域內的內容震鹉, 并且響應該區(qū)域內發(fā)生的觸摸事件

2传趾、功能

(1)管理矩形區(qū)域內的內容

(2)處理矩形區(qū)域中的事件

(3)子視圖的管理

(4)還能實現動畫(UIView的子類也具有這些功能)

3泥技、視圖的內層次


4榕订、三個結構體(CGPoint蜕便、CGSize轿腺、CGRect),三個結構體均在一個頭文件里:CGGeometry.h

(1)CGPoint

struct CGPoint

? ?{

CGFloat x;

CGFloat y;

}

typedef struct CGPoint CGPoint;

(2)CGSize

struct CGSize

{

CGFloat width;

CGFloat height;

}

(3)CGRect

struct CGRect

{

CGPoint origin;

CGSize size;

}

5族壳、視圖的最基本屬性

(1)frame和center都是相對于父視圖的,bounds是相對于自身的

frame? 是CGRect? frame的origin是相對于父視圖的左上角原點(0,0)的位置贰您,改變視圖的frame會改變center

(2)center? 是CGPoint? 指的就是整個視圖的中心點枉圃,改變視圖的center也會改變frame

bounds 是CGRect? 是告訴子視圖本視圖的原點位置(通俗的說就是庐冯,子視圖的frame的origin與父視圖的bounds的origin的差展父,就是子視圖相對于父視圖左上角的位置,如果結果為負篮绿,則子視圖在父視圖外)

通過addSubview:這個方法添加子類亲配,不管誰添加它吼虎,只要越晚添加思灰,視圖就在越上層

移除父視圖也會把它得子視圖移除

frame和bounds是UIView中的兩個屬性(property)混滔。

frame指的是:該view在父view坐標系統(tǒng)中的位置和大小歹颓。(參照點是父親的坐標系統(tǒng))

bounds指的是:該view在本身坐標系統(tǒng)中 的位置和大小巍扛。(參照點是本身坐標系統(tǒng))

-(CGRect)frame{

returnCGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);

}

-(CGRect)bounds{

returnCGRectMake(0,0,self.frame.size.width,self.frame.size.height);

}

6电湘、幾個基本界面元素:window(窗口)、視圖(view)

1)UIView

下面來認識一下UIView類怎诫,這個類繼承自UIResponder,看這個名字我們就知道它是負責顯示的畫布幻妓,如果說把window比作畫框的話。我們就是不斷地在畫框上移除强胰、更換或者疊加畫布偶洋,或者在畫布上疊加其他畫布玄窝,大小當然 由繪畫者來決定了悍引。有了畫布趣斤,我們就可以在上面任意施為了浓领。很多簡單的東西我會把庫里面的內容貼出來联贩,如果東西太多貼出來就不太好,朋友們自己去庫文件里面看吧歹啼。這個類在UIView.h里面。下面我們先學習一些基礎的東西藤树,其他的東東會在以后慢慢展開拓萌。

UIView* myView =[[ UIView alloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];//這里創(chuàng)建了一塊畫布微王,定義了相對于父窗口的位置, 以及大小钧大。

2)UIWindow

UIWindow繼承自UIView罩旋,關于這一點可能有點邏輯障礙涨醋,畫框怎么繼承自畫布呢?不要過于去專牛角尖乓土,畫框的形狀不就是跟畫布一樣嗎帐我?拿一塊畫布然后用一些方法把它加強拦键,是不是可以當一個畫框用呢芬为?這也是為什么 一個view可以直接加到另一個view上去的原因了媚朦。

看一下系統(tǒng)的初始化過程(在application didFinishLauchingWithOptions里面):

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.window.backgroundColor = [UIColor grayColor];//給window設置一個背景色

[self.window makeKeyAndVisible];//讓window顯示出來

3)UIScreen類代表了屏幕日戈,通過這個類我們可以獲取一些想要的東東

CGRect screenBounds = [ [UIScreen mainScreen]bounds];//返回的是帶有狀態(tài)欄的Rect

CGRect viewBounds = [ [UIScreen mainScreen]applicationFrame];//不包含狀態(tài)欄的Rect

//screenBounds 與 viewBounds 均是相對于設備屏幕來說的

//所以 screenBounds.origin.x== 0.0 ; ? screenBounds.oringin.y = 0.0;

screenBounds.size.width == 320; ?screenBounds.size.height == 480(或者其他分辨率有所差異)

//所以 screenBounds.origin.x== 0.0 ; ? screenBounds.oringin.y = 20.0;(因為狀態(tài)欄的高度是20像素)screenBounds.size.width == 320; ?screenBounds.size.height == 480

//取得StatusBar的位置和大小

[self.view addSubview:theToolbar];

CGRect statusBarRect = [[UIApplication sharedApplication]statusBarFrame];

NSLog(@\"%@\", NSStringFromCGRect(statusBarRect));

7份氧、實戰(zhàn)演練

沒結束我會用一個綜合的 例子來總結我的學習成果,徹底理解所學恋拷,我覺得既然選擇寫代碼蔬顾,就要理解原理诀豁,否則只知其然不知其所以然是不能做一個好的程序員的舷胜。

新建一個工程選擇Empty Application ? 名字為LW12)在application didFinishLaunchingWithOptions里面,你會發(fā)現系統(tǒng)已經建好一個畫框了纱新,我們現在就用系統(tǒng)幫我們建好的畫框穆趴,你當然也可以自己建一個畫框未妹,不過沒這個必要了,忘了講了族檬,一個應用程序只能有一個畫框单料。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];//系統(tǒng)幫你建畫框

//自己測試一下 bounds與aplicationFrame的區(qū)別

CGRect bound = [[UIScreen mainScreen]bounds];

NSLog(@"boundwidth:%f ? ?boundheight:%f ",bound.size.width, bound.size.height);

NSLog(@"boundx:%f ? ?boundy:%f ",bound.origin.x, bound.origin.y);

CGRect appBound = [[UIScreen mainScreen]applicationFrame];

NSLog(@"appBoundwidth:%f appBoundheight:%f "

,appBound.size.width,appBound.size.height);

NSLog(@"appBoundx:%f ? ?appBoundy:%f ",appBound.origin.x, appBound.origin.y);

//畫第一塊畫布然涂成藍色,大小是320 X 100

CGRect CGone = CGRectMake(0.0, 0.0, 320, 100);//畫個矩形换怖,初始化位置與大小

UIView *v_one = [[UIView alloc]initWithFrame:CGone];//初始化view

v_one.backgroundColor = [UIColor blueColor];// 涂成藍色

[self.window addSubview:v_one];//直接加到畫框上

//第二塊注意它的位置

CGRect CGtwo = CGRectMake(0.0, 100, 160, 100);//畫個矩形沉颂、初始化位置與大小

UIView *v_two = [[UIView alloc]initWithFrame:CGtwo];//初始化view

v_two.backgroundColor = [UIColor redColor];//涂成紅色

[self.window addSubview:v_two];//疊加到畫框

//第三塊注意他的位置

CGRect CGthree = CGRectMake(160, 100, 160, 100);

UIView *v_three = [[UIView alloc]initWithFrame:CGthree];

v_three.backgroundColor = [UIColor greenColor];

[self.window addSubview:v_three];

//第四塊注意它的位置

CGRect CGfour = CGRectMake(0.0, 260, 320, 200);

UIView *v_four = [[UIView alloc]initWithFrame:CGfour];

v_four.backgroundColor = [UIColor orangeColor];

[self.window addSubview:v_four];//

//第五塊兆览,計算一下它的位置抬探,看看它的效果线梗,

//你可以讓試一下把這段代碼移到第一快初始化的上面試試仪搔,會有意想不到的效果

CGRect CGfive = CGRectMake(100, 150, 160, 200);

UIView *v_five = [[UIView alloc]initWithFrame:CGfive];

v_five.backgroundColor = [UIColor yellowColor];

[self.window addSubview:v_five];

self.window.backgroundColor = [UIColor grayColor];

[self.window makeKeyAndVisible];

//最后記得release

[v_one ?release];

[v_two ?release];

[v_three ?release];

[v_four ?release];

[v_five ?release];

return YES;

}

4)UIView的方法

一個 UIView 里面可以包含許多的 Subview(其他的 UIView)烤咧,而這些 Subview 彼此之間是有所謂的階層關系,這有點類似繪圖軟體中圖層的概念抱虐,下面程式碼示演示了幾個在管理圖層(Subview)上常用的方法恳邀,其程式碼如下谣沸。

1.首先是大家最常使用的新增和移除Subview乳附。

[Subview removeFromSuperview];//將Subview從當前的UIView中移除

[UIView addSubview:Subview];//替UIView增加一個Subview

2.在UIView中將Subview往前或是往后移動一個圖層瓤鼻,往前移動會覆蓋住較后層的 Subview,而往后移動則會被較上層的Subview所覆蓋贤重。

[UIView bringSubviewToFront:Subview];//將Subview往前移動一個圖層(與它的前一個圖層對調位置)//將Subview往前移動一個圖層(與它的前一個圖層對調位置)

[UIView sendSubviewToBack:Subview];//將Subview往后移動一個圖層(與它的后一個圖層對調位置)

3.在UIView中使用索引Index交換兩的Subview彼此的圖層層級茬祷。

[UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];//交換兩個圖層

4.使用Subview的變數名稱取得它在UIView中的索引值(Index )。

NSInteger index = [[UIView subviews] indexOfObject:Subview名稱];//取得Index

5.替Subview加上NSInteger 的註記(Tag)好讓之后它們分辨彼此并蝗。

[Subview setTag:NSInteger];//加上標記

[UIView viewWithTag:NSInteger];//通過標記得到view 返回值為UIView

6.最后是取得UIView中所有的Subview祭犯,呼叫此方法會傳回一個 NSArray秸妥,并以由后往前的順序列出這些 Subview,下圖中是列出范例圖片里Root中所有的Subview沃粗。

[UIView subviews] ;//取的UIView下的所有Subview








粥惧、

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市最盅,隨后出現的幾起案子突雪,更是在濱河造成了極大的恐慌,老刑警劉巖涡贱,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辰狡,死亡現場離奇詭異,居然都是意外死亡些己,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事动知。” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵弃甥,是天一觀的道長瓶珊。 經常有香客問我忘苛,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘咐蚯。我一直安慰自己期奔,他們只是感情好谊娇,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布茫叭。 她就那樣靜靜地躺著莽囤,像睡著了一般蔚舀。 火紅的嫁衣襯著肌膚如雪礼患。 梳的紋絲不亂的頭發(fā)上肤粱,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天单刁,我揣著相機與錄音褥傍,去河邊找鬼凯楔。 笑死锦募,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播过椎,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼敢艰!你這毒婦竟也來了?” 一聲冷哼從身側響起森瘪,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體朋魔,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡镶奉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年使碾,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仅父,死狀恐怖叛薯,靈堂內的尸體忽然破棺而出浑吟,到底是詐尸還是另有隱情,我是刑警寧澤耗溜,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布组力,位于F島的核電站,受9級特大地震影響抖拴,放射性物質發(fā)生泄漏燎字。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一阿宅、第九天 我趴在偏房一處隱蔽的房頂上張望候衍。 院中可真熱鬧,春花似錦洒放、人聲如沸脱柱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榨为。三九已至,卻和暖如春煌茴,著一層夾襖步出監(jiān)牢的瞬間随闺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工蔓腐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矩乐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓回论,卻偏偏與公主長得像散罕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子傀蓉,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容

  • swift語言已經出來一段時間了欧漱,我自己也整理了一些資料和demo,在這里和大家分享一下葬燎。分享的目的呢误甚,就是想和大...
    大臉貓121閱讀 6,890評論 6 6
  • 初識iOS APP開發(fā)#### 在iOS APP開發(fā)中, main函數仍是程序的入口和出口, 但main函數不需要...
    DeanYan閱讀 6,163評論 0 3
  • UIView(控件) 功能一:界面顯示1. 屏幕上顯示的所有UI元素都叫做控件,也有人叫做視圖谱净、組件窑邦;按鈕(UIB...
    翻這個墻閱讀 633評論 0 0
  • 一、初始化方法 1壕探、- initWithFrame: UIView *view = [[UIView alloc]...
    默默_David閱讀 2,508評論 1 3
  • 綠葉歷經春秋換了裝 風兒在我發(fā)絲捉迷藏 小草輕輕搖曳著衣裳 在幾步 就到了我的故鄉(xiāng) 《云》 炊煙裊裊 融合著 擁抱...
    清風不解語閱讀 271評論 1 2