1. 程式人生 > >iphone繪圖的幾個基本概念CGPoint、CGSize、CGRect、CGRectMake、window(視窗)、檢視(view)...

iphone繪圖的幾個基本概念CGPoint、CGSize、CGRect、CGRectMake、window(視窗)、檢視(view)...

我一般情況下不會使用interface builder去畫介面,而是用純程式碼去建立介面,不是裝B,而是剛從vi轉到xcode不久,不太習慣interface builder而已。當然如果需要我也會使用它。一個東西的存在沒有絕對的好與壞,只是存在時間與空間決定了它的價值。

(忘了講了,我的環境是xcode4.2)

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

一)三個結構體:CGPoint、CGSize、CGRect

1. CGPoint

  1. /*Points.*/
  2. structCGPoint{
  3. CGFloatx;
  4. CGFloaty;
  5. };
  6. typedefstructCGPointCGPoint;

看到這個想必你已經懂了,不再解釋。

2. CGSize

  1. /*Sizes.*/
  2. structCGSize{
  3. CGFloatwidth;
  4. CGFloatheight;
  5. };
  6. typedefstructCGSizeCGSize;

不解釋。

3.CGRect

  1. /*Rectangles.*/
  2. structCGRect{
  3. CGPointorigin;//偏移是相對父視窗的
  4. CGSizesize;
  5. };
  6. typedefstructCGRectCGRect;

同樣 不解釋。

這三個結構體均在一個頭檔案裡:CGGeometry.h

二)幾個方法

1.CGRectMake

  1. CG_INLINECGRect
  2. CGRectMake(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight)
  3. {
  4. CGRectrect;
  5. rect.origin.x=x;rect.origin.y=y;
  6. rect.size.width=width;rect.size.height=height;
  7. returnrect;
  8. }

沒錯,這個方法就是make一個rect,定好origin(起點,左上角),寬與高,就可以畫出一個位置與大小確定的rect(矩形)這個函式被宣告為行內函數,一是因為它比較小,二是因為在畫介面時我們要求一定的效率。這個函式還是藏在剛剛那個標頭檔案裡面:CGGeometry.h

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

要在螢幕上顯示內容首先要建立一個視窗承載內容,要建立一個視窗,需要一個邊框(frame),含有邊框資訊的底層 結構就CGRect。每個能夠在螢幕上顯示自己的物件都有一個邊框,定義了他的顯示區域,不過許多高層的檢視類會自動計算這一資訊。其他的那些類則在檢視初始化時通過一個initWithFrame的初始化方法來設定。

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

  1. CGrectscreenBounds=[[UIScreenmainScreen]bounds];//返回的是帶有狀態列的Rect
  2. CGRectviewBounds=[[UIScreenmainScreen]applicationFrame];//不包含狀態列的Rect
  3. //screenBounds與viewBounds均是相對於裝置螢幕來說的
  4. //所以screenBounds.origin.x==0.0;screenBounds.oringin.y=0.0;screenBounds.size.width==320;screenBounds.size.height==480(或者其他解析度有所差異)
  5. //所以screenBounds.origin.x==0.0;screenBounds.oringin.y=20.0;(因為狀態列的高度是20畫素)screenBounds.size.width==320;screenBounds.size.height==480

UIView

下面來認識一下UIView類,這個類繼承自UIResponder,看這個名字我們就知道它是負責顯示的畫布,如果說把window比作畫框的話。我們就是不斷地在畫框上移除、更換或者疊加畫布,或者在畫布上疊加其他畫布,大小當然 由繪畫者來決定了。有了畫布,我們就可以在上面任意施為了。很多簡單的東西我會把庫裡面的內容貼出來,如果東西太多貼出來就不太好,朋友們自己去庫檔案裡面看吧。這個類在UIView.h裡面。下面我們先學習一些基礎的東西,其他的東東會在以後慢慢展開。

  1. UIView*myView=[[UIViewalloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];//這裡建立了一塊畫布,定義了相對於父視窗的位置,以及大小。

我們可以把這塊畫布加到其他畫布上,具體方法後面會講到。我們還可以在這塊畫布上畫上其它好玩的東東,具體情形後面會一一講解。

UIWindow

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

看一下系統的初始化過程(在application didFinishLauchingWithOptions裡面):

  1. self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];
  2. self.window.backgroundColor=[UIColorgrayColor];//給window設定一個背景色