2010-07-24 2 views
4

Я довольно новичок в объективе-j и структуре, поэтому я пытался развернуть и понять некоторый код, но я теряюсь с объектом (или структурой) CGRect.Objective-J and Cappuccino и CGRect

Вот полная документация: Cappuccino

Хорошо, теперь я свертывание, и я стараюсь, чтобы узнать, как работает класс CPView: CPView.j

Теперь я вижу объекты CGRect (или структуры) во всем мире и я просто НЕ МОЖЕТ для жизни выяснить, где определена CGRect. Как это работает? Я чувствую, что у меня что-то не хватает.

Ближайшая вещь, которую я нашел, это CGGeometry.j и CGGeometry.h, но до сих пор не определена структура или объект CGRect.

Может кто-нибудь помочь мне? Как можно создать экземпляр структуры или объекта CGRect и где он определен? Что он содержит? etc ...

Я знаю, что основным способом создания CGRect является использование функции CGRectMake, как указано here.

Мне просто не кажется, что я понимаю, как это работает.

спасибо.

Update:

После просмотра кода еще немного: строка 23, строка 30, и линии 37, кажется, выглядят как своего рода описаний объектов JavaScript. Это верно? Я не уверен ... это то, что переводит эти .j-файлы, которые знают, что такое CGRect? Это причина, по которой мы можем использовать касты и объекты типа CGRect? CGR кажется, что они не то же самое как и любой другой объект, который я видел ранее, и я хотел бы знать, почему :).

Спасибо, снова.

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

Короткий ответ: да, CGRits отличаются от других объектов каппучино. CGR - это не CPObjects, а просто объекты Javascript с элементами x, y, width и height. При создании одного, например, с CGRectMake, вы на самом деле вызывая простую функцию, которая выглядит примерно так:

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

Заявления вы обнаружили являются макросы, которые сам Капучино использует встраивать функцию CGRectMake для лучшей производительности , Макросы используются в конце дня для фактического определения экспортированной функции CGRectMake, используемой в вашем собственном коде (поэтому мой фрагмент выше является просто приближением.)