Objective-J и капучино и CGRect - PullRequest
4 голосов
/ 24 июля 2010

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

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

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

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

Самое близкое, что я нашел, это CGGeometry.j и CGGeometry.h , но структура или объект CGRect по-прежнему не определены.

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

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

Я просто не чувствую, что понимаю, как это работает.

Спасибо.

Обновление:

Посмотрев на код еще немного: строка 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) }

1 Ответ

3 голосов
/ 24 июля 2010

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

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

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

...