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

我一般情況下不會(huì)使用interface builder去畫(huà)界面,而是用純代碼去創(chuàng)建界面,不是裝B,而是剛從vi轉(zhuǎn)到xcode不久,不太習(xí)慣interface builder而已。當(dāng)然如果需要我也會(huì)使用它。一個(gè)東西的存在沒(méi)有絕對(duì)的好與壞,只是存在時(shí)間與空間決定了它的價(jià)值。

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

首先要弄懂幾個(gè)基本的概念。

一)三個(gè)結(jié)構(gòu)體:CGPoint、CGSize、CGRect

1. ?CGPoint

/*?Points.?*/

struct?CGPoint?{

CGFloat?x;

CGFloat?y;

};

typedef?struct?CGPoint?CGPoint;

看到這個(gè)想必你已經(jīng)懂了,不再解釋。

2. ?CGSize

/*?Sizes.?*/

struct?CGSize?{

CGFloat?width;

CGFloat?height;

};

typedef?struct?CGSize?CGSize;

不解釋。

3.CGRect

/*?Rectangles.?*/

struct?CGRect?{

CGPoint?origin;//偏移是相對(duì)父窗口的

CGSize?size;

};

typedef?struct?CGRect?CGRect;

同樣 不解釋。

這三個(gè)結(jié)構(gòu)體均在一個(gè)頭文件里:CGGeometry.h

二)幾個(gè)方法

1.CGRectMake

CG_INLINE?CGRect

CGRectMake(CGFloat?x,?CGFloat?y,?CGFloat?width,?CGFloat?height)

{

CGRect?rect;

rect.origin.x?=?x;?rect.origin.y?=?y;

rect.size.width?=?width;?rect.size.height?=?height;

return?rect;

}

沒(méi)錯(cuò),這個(gè)方法就是make一個(gè)rect,定好origin(起點(diǎn),左上角),寬與高,就可以畫(huà)出一個(gè)位置與大小確定的rect(矩形)這個(gè)函數(shù)被聲明為內(nèi)聯(lián)函數(shù),一是因?yàn)樗容^小,二是因?yàn)樵诋?huà)界面時(shí)我們要求一定的效率。這個(gè)函數(shù)還是藏在剛剛那個(gè)頭文件里面:CGGeometry.h

三)幾個(gè)基本界面元素:window(窗口)、視圖(view)

要在屏幕上顯示內(nèi)容首先要?jiǎng)?chuàng)建一個(gè)窗口承載內(nèi)容,要?jiǎng)?chuàng)建一個(gè)窗口,需要一個(gè)邊框(frame),含有邊框信息的底層 結(jié)構(gòu)就CGRect。每個(gè)能夠在屏幕上顯示自己的對(duì)象都有一個(gè)邊框,定義了他的顯示區(qū)域,不過(guò)許多高層的視圖類(lèi)會(huì)自動(dòng)計(jì)算這一信息。其他的那些類(lèi)則在視圖初始化時(shí)通過(guò)一個(gè)initWithFrame的初始化方法來(lái)設(shè)置。

再來(lái)認(rèn)識(shí)一個(gè)類(lèi):UIScreen。UIScreen類(lèi)代表了屏幕,通過(guò)這個(gè)類(lèi)我們可以獲取一些想要的東東。

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

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

//screenBounds?與?viewBounds?均是相對(duì)于設(shè)備屏幕來(lái)說(shuō)的

//所以?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;(因?yàn)闋顟B(tài)欄的高度是20像素)???screenBounds.size.width?==?320;??screenBounds.size.height?==?480

UIView

下面來(lái)認(rèn)識(shí)一下UIView類(lèi),這個(gè)類(lèi)繼承自UIResponder,看這個(gè)名字我們就知道它是負(fù)責(zé)顯示的畫(huà)布,如果說(shuō)把window比作畫(huà)框的話。我們就是不斷地在畫(huà)框上移除、更換或者疊加畫(huà)布,或者在畫(huà)布上疊加其他畫(huà)布,大小當(dāng)然 由繪畫(huà)者來(lái)決定了。有了畫(huà)布,我們就可以在上面任意施為了。很多簡(jiǎn)單的東西我會(huì)把庫(kù)里面的內(nèi)容貼出來(lái),如果東西太多貼出來(lái)就不太好,朋友們自己去庫(kù)文件里面看吧。這個(gè)類(lèi)在UIView.h里面。下面我們先學(xué)習(xí)一些基礎(chǔ)的東西,其他的東東會(huì)在以后慢慢展開(kāi)。

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

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

UIWindow

UIWindow繼承自UIView,關(guān)于這一點(diǎn)可能有點(diǎn)邏輯障礙,畫(huà)框怎么繼承自畫(huà)布呢?不要過(guò)于去專牛角尖,畫(huà)框的形狀不就是跟畫(huà)布一樣嗎?拿一塊畫(huà)布然后用一些方法把它加強(qiáng),是不是可以當(dāng)一個(gè)畫(huà)框用呢?這也是為什么 一個(gè)view可以直接加到另一個(gè)view上去的原因了。

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

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

self.window.backgroundColor?=?[UIColor?grayColor];//給window設(shè)置一個(gè)背景色

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容