Главная » iPhone » Введение в геометрические структуры iPhone

0

Прежде чем погрузиться в управление событиями, вам потребуется понимание некоторых базовых геометрических структур, обычно используемых в iPhone. Вы уже познакомились с некоторыми из них в главе 3. Платформа Core Graphics предоставляет множество основных структур для управления функциями, отвечающих за работу с графикой. К таким структурам относятся точки, размеры окон и области окна. Core Graphics также предоставляет множество функций языка С для создания и сравнения этих структур.

CGPoint

CGPoint — самая простая структура Core Graphics. Она содержит два значения с плавающей запятой, которые соответствуют горизонтальной {X) и вертикальной (]0 координатам на дисплее. Для создания CGPoint используется метод CGPointMake;

CGPoint point = CGPointMake (320.0, 480.0);

Первое значение соответствует Х-коордйнате по горизонтали, и второе — К-координате по вертикали. Эти значения так же могут быть получены напрямую:

float х = point.х; float у = point.у;

Дисплей iPhone имеет разрешение 320×480 точек. Левый верхний угол экрана принимается за начало отсчета с координатами (0, 0), а максимальное значение достигается в правом нижнем углу экрана (319. 479). Отсчет координат идет от нуля.

Будучи универсальной структурой, CGPoint может одинаково хорошо ссылаться на координату как экрана, так и области окна. Например, если окно имеет размеры 160×240 (половина экрана), то CGPoint со значением (0, 0) может адресовать либо левый верхний угол экрана, либо левый верхний угол окна (0x240). Что конкретно адресует эта структура, определяется из контекста использования структуры в программе. Две структуры CGPoint можно сравнить с помощью функции CGPointEqualToPoint: BOOL isEqual = CGPointEqualToPoint(point1, point2);

CGSize

Структура CGSize представляет размер прямоугольника. Она инкапсулирует ширину и высоту объекта и изначально находится в API iPhone, задавая размер объектов экрана, т. е. окон. Чтобы создать объект CGSize, воспользуйтесь

CGSizeMake:

CGSize size – CGSizeMake(320.О, 480.0);

Значения, передаваемые в CGSizeMake, указывают ширину и высоту описываемого элемента. Эти значения можно получить напрямую с помощью имен переменных width и height структуры:

float width = size.width; float height = size.height;

Сравнить две структуры CGSize можно с помощью функции

CGSizeEqualToSize:

BCX5L isEqual = CGSizeEqualToSize(sizel, size2);

CGRect

Структура CGRect объединяет структуры CGPoint и CGSize для описания области окна на экране. Область окна описывается origin, представля^ощей местоположение левого верхнего угла окна, и size— размером окна. Для создания CGRect используется функция CGRectMake: CGRect rect = CGRectMake(0, 200, 320, 240);

Этот пример описывает окно 320×240, левый верхний угол которого расположен в точке координат (0, 200). Как и в случае со структурой CGPoint, эти координаты могут соответствовать либо самой точке на экране, либо смещению внутри существующего окна. Это зависит от того, где и как используется структура CGRect.

К компонентам структуры CGRect также можно получить доступ напрямую:

CGPoint windowOrigin = rect.origin; float x = rect.origin.x; float у = rect.origin.у;

CGSize windowSize = rect.size; float width = rect.size.width; float height = rect.size.height;

Включение и пересечение

Две структуры CGRect можно сравнить с помощью функции

CGRectEqualToRect:

BOOL isEqual = CGRectEqualToRect(recti, rect2);

Чтобы определить, содержится ли заданная точка в CGRect, воспользуйтесь методом CGRectContainsPoint. Это особенно полезно при определении того, коснулся ли пользователь экрана в какой-либо конкретной области. Точка представляется в виде структуры CGPoint: BOOL containsPoint = CGRectContainsPoint(rect, point);

Подобная функция может использоваться для определения, содержит ли одна структура CGRect другую структуру CGRect. Это полезно при выяснении того, перекрываются ли заданные объекты:

BOOL containsRect = CGRectContainsRect(recti, rect2);

Чтобы определить, пересекаются ли две структуры CGRect, используйте функцию CGRectIntersectsRect:

BOOL doeslntersect = CGRectlntersectsRect(recti, rect2);

Обнаружение границы и центра

Следующие функции могут использоваться для определения различных границ прямоугольника и вычисления координат центра прямоугольника. Все эти функции принимают структуру CGRect в качестве своего единственного аргумента и возвращают значение типа float:

?   CGRectGetMinX— возвращает координату левой границы прямоугольника;

?   CGRectGetMinY — возвращает координату нижней границы прямоугольника;

?   CGRectGetMidx — возвращает ^-координату центра прямоугольника;

?   CGRectGetMidY — возвращает Г-координату центра прямоугольника;

?   CGRectGetMaxx— возвращает координату правой границы прямоугольника;

?   CGRectGetMaxY — возвращает координату верхней границы прямоугольника.

Введение в GSEvent

Структура GSEvent — стандартный объект, описывающий события графического уровня как методы обработки событий класса. Он может быть использован совместно с платформой Graphics Services для расшифровки детальной информации о произошедшем событии.

При получении уведомления о каком-либо событии все методы события получают указатель на структуру GSEvent. Прототип события, как правило, следует такому стандарту:

- (void)eventName: (struct _GSEvent *)event

{

/* Код обработки события */

}

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии