代码之家  ›  专栏  ›  技术社区  ›  Derek Litz

目标-J和卡布奇诺及CGRECT

  •  4
  • Derek Litz  · 技术社区  · 14 年前

    我对Objective-J和框架还比较陌生,所以我试图深入了解并理解一些代码,但是我对Object(或Struct)CGRect迷路了。

    以下是完整的文档: Cappuccino

    好了,现在我要深入学习cpview类的工作原理: CPView.j

    现在,我在任何地方都能看到CGRECT对象(或结构),而我一辈子都无法确定CGRECT的定义。这是怎么工作的?我觉得我错过了什么。

    我找到的最接近的东西是 CGGeometry.j CGGeometry.h ,但仍然没有定义CGRECT结构或对象。

    有人能帮我吗?如何能够实例化CGRECT结构或对象,以及在何处定义它?它包含什么?等…

    我知道创建CGRECT的主要方法是使用如前所述的CGRECTMAKE函数 here .

    我只是觉得我不明白这是怎么回事。

    谢谢您。

    更新:

    在看了更多代码之后:第23行、第30行和第37行,看起来有点像JavaScript对象描述。这是正确的吗?我不确定…翻译这些.j文件的内容是否知道cgrect已经是什么?这就是我们可以使用(cgrect)类型的类型转换和对象的原因吗?cDirect似乎是 不一样 就像我看到的其他物体一样,我想知道原因。

    再次谢谢。

    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) }
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Alexander Ljungberg    14 年前

    简短的回答是肯定的,cDirect与其他卡布奇诺物体不同。CGRECT不是CPOBJECTS,而是简单的带有x、y、width和height成员的javascript对象。当您创建一个函数时,例如使用cDirectMake,实际上是在调用一个简单的函数,它看起来像这样:

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

    您发现的声明是卡布奇诺本身用于内联cDirectMake函数以获得更好的性能的宏。这些宏在一天结束时被用来实际定义在您自己的代码中使用的导出的cDirectMake函数(这就是为什么上面的代码片段只是一个近似值)。

    推荐文章