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. struct CGPoint {  
  3.   CGFloat x;  
  4.   CGFloat y;  
  5. };  
  6. typedef struct CGPoint CGPoint;  

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

2.  CGSize

  1. /* Sizes. */  
  2. struct CGSize {  
  3.   CGFloat width;  
  4.   CGFloat height;  
  5. };  
  6. typedef struct CGSize CGSize;  

不解釋。

3.CGRect

  1. /* Rectangles. */  
  2. struct CGRect {  
  3.   CGPoint origin;//偏移是相對父視窗的  
  4.   CGSize size;  
  5. };  
  6. typedef struct CGRect CGRect;  

同樣 不解釋。

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

二)幾個方法

1.CGRectMake

  1. CG_INLINE CGRect  
  2. CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)  
  3. {  
  4.   CGRect rect;  
  5.   rect.origin.x = x; rect.origin.y = y;  
  6.   rect.size.width = width; rect.size.height = height;  
  7.   return rect;  
  8. }  

沒錯,這個方法就是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;   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 =[[ UIView alloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];//這裡建立了一塊畫布,定義了相對於父視窗的位置, 以及大小。  

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

UIWindow

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

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

  1. self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
  2. self.window.backgroundColor = [UIColor grayColor];//給window設定一個背景色  

相關推薦

iphone繪圖基本概念CGPointCGSizeCGRectCGRectMakewindow視窗檢視view

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

iphone繪圖基本概念CGPointCGSizeCGRectCGRectMakewindow視窗檢視view...

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

WebLogic(12C)——基本概念

分配 domain 基本 機器 eve 不依賴 影響 right term 轉http://blog.csdn.net/hanxuemin12345/article/details/46287597 目錄(?)[-] 域Domain 服務器Server 機器Mac

計量經濟與時間序列_時間序列分析的基本概念(自相關函數,偏自相關函數等)

sig 永不 均值 blog 那種 屬於 class 觀察 自相關 1. 在時間序列分析中, 數學模型是什麽?數學公式又是什麽?數學推導過程又是什麽?... ...   一句話:用數學公式後者符號來表示現實存在的意義。數學是“萬金油”的科學,它是作為工作和分析方法運用到某

關於“知識共享”的基本概念

關於“知識共享”的幾個基本概念 目前,對於我們向全國高校投放魯賓遜微積分教材電子版的行動與實行“知識共享”許可協議之間的關係,有人仍然缺乏理解。 魯賓遜微積分教材電子版扉頁上印有“知識共享”標識,所以,投放行動(發行)是有根據的。     本文附件是一份“知識共享”文字

kafka中的基本概念

Kafka架構是由producer(訊息生產者)、consumer(訊息消費者)、borker(kafka叢集的server,負責處理訊息讀、寫請求,儲存訊息,在kafka cluster這一層這裡,其實裡面是有很多個broker)、topic(訊息佇列/分類相當於佇列,裡面有生產者和消費者模型)、

筆記-git中的基本概念

jpg pre 父節點 sha 推薦一個 必須 解釋 checkout 形式 這篇筆記旨在理解幾個核心的git基本概念,如果對git了解較少,可以先看git基本教程。 這裏推薦一個:廖雪峰-Git教程 commit(提交) 與 branch(分支) 版本號 commit是

基本概念

linux與檔案系統的關係     1   執行linux  必須要有 linux核心 和 檔案系統     2   linux是在執行的最後才掛載檔案系統(就是所有驅動初始化完成以後,最後一步才掛載檔案系統)     zImage就是核心,執行起來以後掛載 1 和

併發程式設計的基本概念

同步&非同步 同步(Synchronous) 同步方法一旦呼叫必須等待方法呼叫返回後才會繼續後續行動。 非同步(AsyncChronous) 非同步呼叫更像傳遞一個訊息,一旦開始方法呼叫就會返回,呼叫者可以進行後續的操作,在java中非同步方法非同步都會在寧外一個執行緒中執行

機器學習:機器學習中的基本概念

前言 對於《統計學習方法》中遇到的一些問題,以及機器學習中的一些自己沒有理解透徹的問題,希望通過梳理總結能夠有更深入的理解。 在上一章最開始我們已經概括了統計學習方法的三要素,即模型、策略、演算法,這裡就不再詳述了。 本文討論總結了如下幾個概念:損失函式與風險

路由選擇協議的基本概念

紫色代表一級目錄 粉紅代表二級目錄 藍色代表三級目錄 紅色代表關鍵字 橙色代表說明 有關路由選擇協議的幾個基本概念   理想的路由演算法     演算法必須是正確的和完整的。     演算法在計算上應簡單。     演算法應能適應通訊量和網路拓撲的變化,這就是說,要有自適應性。     

Spark的基本概念:Driver和Job,Stage

Driver Program, Job和Stage是Spark中的幾個基本概念。Spark官方文件中對於這幾個概念的解釋比較簡單,對於初學者很難正確理解他們的涵義。 官方解釋如下(http://spark.apache.org/docs/latest/cluster-overview.html): Driv

詳解基本概念“標準差&標準誤差,方差&均方差”

對於從事資料工作的人來說,經常需要用到方差、標準差、均方差等概念,但即使是一個數學專業的畢業生(比如我自己),經常也會被這幾個概念弄得頭暈腦脹,使用的時候也是清楚的少,碰運氣的多。 這裡,我

GPU以及CUDA的基本概念理解

參考:blog.sina.com.cn/s/blog_80ce3a550101lntp.html GPU的硬體結構中與CUDA相關的幾個概念:thread block grid warp sp sm streaming processor(sp): 最基本的

線程的主要概念----線程間通信;線程死鎖;線程控制:掛起停止和恢復(線程同步的5種方式)

推薦 處理 本地變量 之間 管理 zed 空間 get ted (一)線程同步(5種同步方式) 1.同步方法--->有synchronized關鍵字修飾的方法。(Java的每個內置對象都有一個內置鎖,當用synchronized修飾方法--->內置鎖保護整個方法

Docker 三基本概念——映象容器倉庫

文章目錄 1、映象 (Image) 2、容器 (Container) 3、倉庫 (Repository) 3.1、倉庫註冊伺服器 4、映象與容器的關係 5、映象、容器、倉庫 執行關係圖:

英語的基本語法概念

詞法和句法 詞法 詞法研究的物件是各種詞的形式及其用法。 英語詞類的形式變化有:名詞和代詞的數、格、性的形式變化;動詞的人稱、時態、語態、語氣等的形式變化;以及形容詞和副詞的比較等級的形式變化。 句法 句法研究物件的是句子各個組成部分及其安排的規律

Docker中的三基本概念容器container鏡像image和倉庫registry

動態 新的 倉庫 sof aca rod cts 使用 基礎 Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。 鏡像不包含任何動態數據,其內容在構建之後也不會

軟件測試的基本原則

其中 排除 多次 排列 參與 基於 所有 業務 相關 我一直認為軟件測試是一件很有原則的工作,這個原則是最重要的,方法都應該在原則指導下進行。軟件測試的基本原則是站在用戶 的角度,對產品進行全面測試,盡早、盡可能多地發現 Bug,並負責跟蹤和分析產品中的問題,對不足之處提出

linux 容易混淆的基本命令

linux字符串比較:str01 = str02 兩者比較相同結果為真str01 != str02 兩者比較不同結果為真-n str 不為空為真-z str 結果為null 為真算術比較:a1 -eq a2 等於 a1 -ne a2 不等於a1 -gt a2 大於a1 -ge a2 大於等於a1 -