iOS第四章之 有關View的幾個基礎知識點

2021-12-29 16:34:44 字數 2841 閱讀 8724

關於 uiview 的基礎知識

首先要弄懂幾個基本的概念。

一)三個結構體:cgpoint、cgsize、cgrect

1.  cgpoint

1.     /* points. */ 

2.      

3.     struct cgpoint ; 

7.     typedef struct cgpoint cgpoint; 

8.     

2.  cgsize

1.     /* sizes. */ 

2.      

3.     struct cgsize ; 

7.     typedef struct cgsize cgsize; 

3.cgrect

1.     /* rectangles. */ 

2.      

3.     struct cgrect ; 

7.     typedef struct cgrect cgrect; 

這三個結構體均在乙個標頭檔案裡:cggeometry.h

二)幾個方法

1.cgrectmake

1.     cg_inline cgrect 

2.     cgrectmake(cgfloat x, cgfloat y, cgfloat width, cgfloat height) 

3.      

這個方法就是make乙個rect,定好origin(起點,左上角),寬與高,就可以畫出乙個位置與大小確定的rect(矩形)。

這個函式被宣告為內聯函式,一是因為它比較小,二是因為在畫介面時我們要求一定的效率。這個函式還是藏在剛剛那個標頭檔案裡面:cggeometry.h

三)幾個基本介面元素:window(視窗)、檢視(view)

要在螢幕上顯示內容首先要建立乙個視窗承載內容,要建立乙個視窗,需要乙個邊框(frame),含有邊框資訊的底層 結構就cgrect。

每個能夠在螢幕上顯示自己的物件都有乙個邊框,定義了他的顯示區域,不過許多高層的檢視類會自動計算這一資訊。其他的那些類則在檢視初始化時通過乙個initwithframe的初始化方法設定。

再來認識乙個類:uiscreen。uiscreen類代表了螢幕,通過這個類我們可以獲取一些想要的東東。

1.     cgrect screenbounds = [ [uiscreen mainscreen]bounds];//返回的是帶有狀態列的rect 

2.     cgrect viewbounds = [ [uiscreen mainscreen]applicationframe];//不包含狀態列的rect 

3.     //screenbounds 與 viewbounds 均是相對於裝置螢幕來說的 

4.     //所以 screenbounds.origin.x== 0.0 ;   screenbounds.oringin.y = 0.0;    

5.     screenbounds.size.width == 320;  screenbounds.size.height == 480(或者其他解析度有所差異) 

6.     //所以 screenbounds.origin.x== 0.0 ;   screenbounds.oringin.y = 20.0;(因為狀態列的高度是20畫素)   screenbounds.size.width == 320;  screenbounds.size.height == 480 

uiview

下面來認識一下uiview類,這個類繼承自uiresponder,看這個名字我們就知道它是負責顯示的畫布,如果說把window比作畫框的話。我們就是不斷地在畫框上移除、更換或者疊加畫布,或者在畫布上疊加其他畫布,大小當然由繪畫者來決定了。有了畫布,我們就可以在上面任意施為了。

1.     uiview* myview =[[ uiview alloc]initwithframe:cgrectmake(0.0,0.0,200.0,400.0)];//這裡建立了一塊畫布,定義了相對于父視窗的位置, 以及大小。 

uiwindow

uiwindow繼承自uiview,關於這一點可能有點邏輯障礙,畫框怎麼繼承自畫布呢?不要過於去專牛角尖,畫框的形狀不就是跟畫布一樣嗎?拿一塊畫布然後用一些方法把它加強,是不是可以當乙個畫框用呢?這也是為什麼乙個view可以直接加到另乙個view上去的原因了。

系統的初始化過程(applicationdidfinishlauchingwithoptions):

1.     self.window = [[[uiwindow alloc] initwithframe:[[uiscreen mainscreen] bounds]] autorelease]; 

2.     self.window.backgroundcolor = [uicolor graycolor];//給window設定乙個背景色 

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

**練習:

1)新建乙個工程選擇emptyapplication   名字為lll 在applicationdidfinishlaunchingwithoptions裡面,你會發現系統已經建好乙個畫框了,我們現在就用系統幫我們建好的畫框,你當然也可以自己建乙個畫框,不過沒這個必要了,乙個應用程式只能有乙個畫框(uiwindow)。

1.     - (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions 

2.      

是不是看到五顏六色的塊了?你可以精確計算一下大小與位置,多幾種變化,類似與 css+ div 進行 網頁中的塊定位

第四章 繼承

一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...

第四章 物件

三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...

第四章 其他

sizeof和strlen 區別sizeof以位元組為單位給出資料的大小,strlen 函式以字元為單位給出字串的長度。使用strlen 函式要加 include標頭檔案。sizeof計算字元時會將標誌字串結束的不可見的空字元計算在內。定義符號常量 方法一 define name value 優點 ...