2010-07-24 43 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函数(这就是为什么我上面的代码片段仅仅是一个近似值。)