Кроме того, мы можем воспользоваться методом экземпляра drawInRect: withFont:, относящимся к классу NSString, чтобы нарисовать текст внутри прямоугольной области. Текст будет растянут, чтобы он полностью занял отведенное пространство. Фреймворк UIKit даже позволяет переносить часть текста на следующую строку, если он не будет умещаться в отведенном прямоугольнике по горизонтали. Границы прямоугольной области инкапсулированы в структурах CGRect. Для создания границ прямоугольника можно использовать функцию CGRectMake:
— (void)drawRect:(CGRect)rect{
/* Загружаем цвет. */
UIColor *magentaColor = [UIColor colorWithRed:0.5f
green:0.0f
blue:0.5f
alpha:1.0f];
/* Задаем цвет в графическом контексте. */
[magentaColor set];
/* Загружаем шрифт. */
UIFont *helveticaBold = [UIFont boldSystemFontOfSize:30];
/* Строка, которую требуется отрисовать. */
NSString *myString = @"I Learn Really Fast";
/* Рисуем строку выбранным шрифтом.
Цвет мы уже установили. */
[myString drawInRect: CGRectMake(100, /* x */
120, /* y */
100, /* ширина */
200) /* высота */
options: NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName: helveticaBold
}
context: nil];
}
Функция CGRectMake принимает четыре параметра:
• x — положение начала координат прямоугольника по оси
• y — положение начала координат прямоугольника по оси
• width — ширина прямоугольника в точках;
• height — высота прямоугольника в точках.
Результат выполнения кода показан на рис. 17.8.
Рис. 17.8. Отрисовка строки в прямоугольном пространстве
UIColor — это, в сущности, предоставляемая в UIKit оболочка для класса CGColor из фреймворка Core Graphics. Переходя к довольно низкоуровневому программированию — то есть на уровне Core Graphics, — мы неожиданно обретаем значительно более полный контроль над использованием цветовых объектов и даже можем определить цветовые компоненты, из которых состоит конкретный оттенок. Допустим, в каком-то другом коде вы получили объект типа UIColor и хотите определить, каковы содержащиеся в нем доли компонентов red, green, blue и alpha. Чтобы получить компоненты, из которых состоит объект UIColor, выполните следующие шаги.
1. Используйте метод экземпляра CGColor, относящийся к классу UIColor. В результате вы получите цветовой объект типа CGColorRef, представляющий собой ссылку на цветовой объект (Color Reference) — объект из фреймворка Core Graphics.
2. Применяйте функцию CGColorGetComponents для получения компонентов, составляющих цветовой объект.
3. При необходимости пользуйтесь функцией CGColorGetNumberOfComponents, чтобы определить количество компонентов, примененных для создания данного оттенка (красный + зеленый и т. д.).
Вот пример:
— (void) drawRect:(CGRect)rect{
/* Загрузка цвета */
UIColor *steelBlueColor = [UIColor colorWithRed:0.3f
green:0.4f
blue:0.6f
alpha:1.0f];
CGColorRef colorRef = [steelBlueColor CGColor];
const CGFloat *components = CGColorGetComponents(colorRef);
NSUInteger componentsCount = CGColorGetNumberOfComponents(colorRef);
NSUInteger counter = 0;
for (counter = 0;
counter < componentsCount;
counter++){
NSLog(@"Component %lu = %.02f",
(unsigned long)counter + 1,
components[counter]);
}
}
После запуска кода получим в окне консоли следующий вывод:
Component 1 = 0.30
Component 2 = 0.40
Component 3 = 0.60
Component 4 = 1.00
См. также
Раздел 17.1.
17.4. Отрисовка изображений
Постановка задачи
Требуется возможность отрисовывать изображения на экране устройства с iOS.
Решение