Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Функции преобразования масштаба принимают два параметра: масштабирование по оси X и масштабирование по оси Y. Еще раз обратимся к прямоугольнику с рис. 17.22. Если мы хотим масштабировать этот прямоугольник, чтобы его исходные длина и ширина уменьшились вполовину, то можно просто масштабировать по оси X и Y на 0,5 (вполовину от исходного значения), как показано здесь:

/* Масштабируем прямоугольник, уменьшая его на половину. */

CGAffineTransform transform =

CGAffineTransformMakeScale(0.5f, 0.5f);

/* Добавляем
прямоугольник к пути. */

CGPathAddRect(path,

&transform,

rectangle);

На рис. 17.31 показано, что получится, когда мы применим преобразование масштаба к коду, написанному в разделе 17.8.

Рис. 17.31. Масштабирование прямоугольника

Дополнительно к функции CGAffineTransformMakeScale можно использовать процедуру CGContextScaleCTM, помогающую применить преобразование масштаба к графическому контексту. Следующий код даст тот же эффект, что и в предыдущем примере (вновь обратите внимание на рис. 17.31):

— (void)drawRect:(CGRect)rect{

/* Сначала создаем путь. Просто описатель пути. */

CGMutablePathRef path = CGPathCreateMutable;

/* Это границы прямоугольника. */

CGRect rectangle = CGRectMake(10.0f,

10.0f,

200.0f,

300.0f);

/* Добавляем прямоугольник к пути. */

CGPathAddRect(path,

NULL,

rectangle);

/* Получаем описатель текущего контекста. */

CGContextRef currentContext = UIGraphicsGetCurrentContext;

/* Масштабируем все фигуры, отрисованные в графическом контексте,

уменьшая их на половину. */

CGContextScaleCTM(currentContext,

0.5f,

0.5f);

/* Добавляем путь к контексту. */

CGContextAddPath(currentContext,

path);

/* Задаем голубой в качестве цвета заливки. */

[[UIColor colorWithRed:0.20f

green:0.60f

blue:0.80f

alpha:1.0f] setFill];

/* Задаем для обводки коричневый цвет. */

[[UIColor brownColor] setStroke];

/* Задаем
для ширины (обводки) значение 5. */

CGContextSetLineWidth(currentContext,

5.0f);

/* Проводим путь в контексте и применяем к нему заливку. */

CGContextDrawPath(currentContext,

kCGPathFillStroke);

/* Избавляемся от пути. */

CGPathRelease(path);

}

См. также

Раздел 17.11.

17.13. Вращение фигур, нарисованных в графических контекстах

Постановка задачи

Требуется иметь возможность вращать содержимое, отрисованное в графическом контексте, не изменяя при этом код отрисовки.

Решение

Воспользуйтесь функцией CGAffineTransformMakeRotation для создания аффинного преобразования вращения.

Обсуждение

Перед тем как приступать к работе с этим разделом, настоятельно рекомендую вам перечитать материал из разделов 17.11 и 17.12. Чтобы сократить текст, я старался не дублировать в последующих разделах материал, уже изложенный в предыдущих.

Точно так же, как при масштабировании и сдвиге, мы можем применять преобразование вращения к фигурам, отрисованным на путях и прямо в графическом контексте. Можно использовать функцию CGAffineTransformMakeRotation и сообщать значение вращения в радианах, а в качестве возвращаемого значения получать преобразование вращения типа CGAffineTransform. Затем это преобразование можно применять к путям и фигурам. Если вы хотите повернуть весь контекст на определенный угол, используйте процедуру CGContextRotateCTM.

Повернем прямоугольник, изображенный на рис. 17.22, на 45° по часовой стрелке (рис. 17.32). Значение, полученное в результате вращения, должно быть выражено в радианах. Положительные значения дают вращение по часовой стрелке, а отрицательные — против часовой:

/* Вращаем прямоугольник на 45° по часовой стрелке. */

CGAffineTransform transform =

CGAffineTransformMakeRotation((45.0f * M_PI) / 180.0f);

/* Добавляем прямоугольник к пути. */

CGPathAddRect(path,

&transform,

rectangle);

Рис. 17.32. Вращение прямоугольника

Как было показано в разделе 17.12, мы можем применить преобразование и непосредственно к графическому контексту — с помощью процедуры CGContextRotateCTM.

См. также

Разделы 17.11 и 17.12.

17.14. Анимирование и перемещение видов

Поделиться:
Популярные книги

Оперативная деятельность и вопросы конспирации в работе спецслужб Т. 3

Ивахин Анатолий Евгеньевич
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Оперативная деятельность и вопросы конспирации в работе спецслужб Т. 3

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Зеркало Правды. История первая

Шизода Рамира
1. Хроники маджикайцев
Фантастика:
фэнтези
5.00
рейтинг книги
Зеркало Правды. История первая

Балаустион

Конарев Сергей
Фантастика:
альтернативная история
6.88
рейтинг книги
Балаустион

Путь России. Новая опричнина, или Почему не нужно «валить из Рашки»

Делягин Михаил Геннадьевич
Документальная литература:
публицистика
5.00
рейтинг книги
Путь России. Новая опричнина, или Почему не нужно «валить из Рашки»

Глинглокский лев. (Трилогия)

Степной Аркадий
90. В одном томе
Фантастика:
фэнтези
9.18
рейтинг книги
Глинглокский лев. (Трилогия)

Игрушки дома Баллантайн

Семироль Анна
Фантастика:
социально-философская фантастика
стимпанк
8.88
рейтинг книги
Игрушки дома Баллантайн

Благословение Небожителей. Том 1

Мосян Тунсю
1. Благословение Небожителей
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.25
рейтинг книги
Благословение Небожителей. Том 1

Троя. Герои Троянской войны Книга 1

Измайлова Ирина Александровна
Приключения:
исторические приключения
5.00
рейтинг книги
Троя. Герои Троянской войны Книга 1

Больше чем смерть: Сад времени. Неадертальская планета. На белой полосе

Олдисс Брайан
Фантастика:
научная фантастика
5.00
рейтинг книги
Больше чем смерть: Сад времени. Неадертальская планета. На белой полосе

Мрачные сны воров

Инин Дмитрий
5. Негодяй Аллара
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Мрачные сны воров

Франклин Рузвельт. Человек и политик (с иллюстрациями)

Бернс Джеймс Макгрегор
Проза:
историческая проза
6.25
рейтинг книги
Франклин Рузвельт. Человек и политик (с иллюстрациями)

Кодекс Охотника. Книга XXXV

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

Бояръ-Аниме. Газлайтер. Том 33

Володин Григорий Григорьевич
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33