2010-07-24 53 views
4

我對objective-j和框架相當陌生,所以我試圖鑽取並理解一些代碼,但我迷失於對象(或結構)CGRect。Objective-J和卡布奇諾以及CGRect

以下是完整的文檔:Cappuccino

好了,我現在向下鑽取,我嘗試學習CPView類是如何工作的:CPView.j

現在,我看到的CGRect對象(或結構)無處不在我只是不能爲我的生活找出CGRect的定義。這個怎麼用?我覺得我錯過了一些東西。

我發現的最接近的東西是CGGeometry.jCGGeometry.h,但仍然沒有定義CGRect結構或對象。

有人可以幫我嗎?如何實例化一個CGRect結構或對象,以及它在哪裏定義?它包含什麼?等等等等......

我知道創建CGRect的主要方法是使用CGRectMake函數,如here所述。

我只是不覺得我掌握了這是如何工作的。

謝謝。

更新:

看代碼一些經過:23行,行30和37行,似乎有點像JavaScript對象的描述。它是否正確?我不確定...是什麼翻譯這些.j文件知道CGRect已經是什麼?這是我們可以使用(CGRect)類型和對象的原因嗎? CGRects看起來像他們是不一樣到目前爲止我見過的任何其他對象,我想知道爲什麼:)。

再次感謝。

00023 #define _CGPointMake(x_, y_) { x:x_, y:y_ } 
00024 #define _CGPointMakeCopy(aPoint) _CGPointMake(aPoint.x, aPoint.y) 
00025 #define _CGPointMakeZero() _CGPointMake(0.0, 0.0) 
00026 
00027 #define _CGPointEqualToPoint(lhsPoint, rhsPoint) (lhsPoint.x == rhsPoint.x && lhsPoint.y == rhsPoint.y) 
00028 #define _CGStringFromPoint(aPoint) ("{" + aPoint.x + ", " + aPoint.y + "}") 
00029 
00030 #define _CGSizeMake(width_, height_) { width:width_, height:height_ } 
00031 #define _CGSizeMakeCopy(aSize) _CGSizeMake(aSize.width, aSize.height) 
00032 #define _CGSizeMakeZero() _CGSizeMake(0.0, 0.0) 
00033 
00034 #define _CGSizeEqualToSize(lhsSize, rhsSize) (lhsSize.width == rhsSize.width && lhsSize.height == rhsSize.height) 
00035 #define _CGStringFromSize(aSize) ("{" + aSize.width + ", " + aSize.height + "}") 
00036 
00037 #define _CGRectMake(x, y, width, height) { origin: _CGPointMake(x, y), size: _CGSizeMake(width, height) } 

回答

3

簡短的回答是肯定的,CGRects不像其他的卡布奇諾物品。 CGRects不是CPObjects,而只是帶有x,y,寬度和高度成員的Javascript對象。當你創建一個,如用CGRectMake,你實際上是調用一個簡單的函數,它看起來是這樣的:

function CGRectMake(_x, _y, _width, _height) 
{ 
    return { 
     origin: { x:_x, y:_y }, 
     size: { width: _width, height: _height } 
    }; 
} 

您發現該聲明是其卡布奇諾本身使用內聯CGRectMake功能獲得更好的性能宏。在一天結束時使用這些宏來實際定義在您自己的代碼中使用的導出的CGRectMake函數(這就是爲什麼我上面的代碼片段僅僅是一個近似值。)