Невозможно понять преобразование графической системы координат ядра iOS, нужна помощь

Я пытаюсь понять кварцевую 2-мерную систему координат. В настоящее время я читаю справочное руководство Apple и старую книгу «Кварцевая 2-мерная графика для разработчика mac os x».

Я понимаю концепцию пространства пользователя и пространства устройства, согласно которой пространство устройства может иметь разные системы координат по умолчанию, а координаты пространства устройства не могут быть изменены, и мы сопоставляем пространство пользователя, изменяя его систему координат в соответствии с устройство-пространство для достижения желаемого результата.


  • Первая часть проблемы

В книге разработчиков Quartz 2d graphics для mac os x говорится:

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

я не выделил это жирным шрифтом.

И

Руководство по программированию Quartz 2D говорит:

Quartz обеспечивает независимость устройства с помощью отдельной координаты. system - пользовательское пространство - отображение в системе координат вывода устройство - пространство устройства - с использованием текущей матрицы преобразования или CTM. А Матрица - это математическая конструкция, используемая для эффективного описания множества связанных уравнений. Текущая матрица преобразования - это особый тип матрицы, называемый аффинным преобразованием, который отображает указывает из одного координатного пространства в другое, применяя перевод, операции вращения и масштабирования (вычисления, которые перемещают, вращают и изменить размер системы координат).

Текущая матрица преобразования имеет второстепенное назначение: она позволяет вы можете изменить способ рисования объектов. Например, чтобы нарисовать коробку повернутый на 45 градусов, вы поворачиваете систему координат страницы (CTM), прежде чем рисовать коробку. Кварц обращается к устройству вывода. с использованием повернутой системы координат.

Заблуждение состоит в том, что «Кварц обращается к устройству вывода с помощью повернутой системы координат.", если я хочу нарисовать один объект (изображение и т. д.) повернутым, а другой - без вращения, то что произойдет? У нас повернуты целые координаты, все будет нарисовано повернуто?

Я пробую разные эксперименты, но не могу обернуть голову вокруг этого я создаю изображение, на котором рисую две линии, повторяющие нижнюю левую систему координат в фотошопе, а затем добавляю в свой проект, чтобы наглядно увидеть, как ведут себя координаты, вызывая CGContextRotateCTM (myContext, 45); в методе drawrect, но он ничего не сделал с изображением, которое я включил в файл xib, используя построитель интерфейса, поместив изображение внутри uiimage.

этот код взят из руководства по программированию в кварцевом 2D

CGContextRef myContext = UIGraphicsGetCurrentContext();
CGRect contextRect = self.bounds;

CGContextTranslateCTM(myContext, 0, contextRect.size.height);
CGContextRotateCTM(myContext, 45); //my modification
CGContextScaleCTM(myContext, 1, -1);

float w, h;
w = contextRect.size.width;
h = contextRect.size.height;

CGAffineTransform myTextTransform;
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (myContext, 10);
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke);

CGContextSetRGBFillColor (myContext, 0, 1, 0, .5);
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1);
myTextTransform =  CGAffineTransformMakeRotation(0);
CGContextSetTextMatrix (myContext, myTextTransform);
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9);

, но этот код изменяет текст, отображаемый на экране, а не изображение, которое я добавил?


  • Вторая часть проблемы

Это также из руководства по программированию Quartz 2D:

... применить преобразование, которое переводит начало координат в верхний левый угол угол контекста PDF и масштабирует координату y на -1.

Использование масштабирующего преобразования для отрицания координаты Y изменяет некоторые условные обозначения в чертеже кварца. Например, если вы позвоните CGContextDrawImage для рисования изображения в контексте, изображение изменяется преобразованием, когда оно втягивается в место назначения. ...

Я уже делаю это -1, но не влияю на изображение, а этот -1 для меня все еще непонятен.

Я читал этот документ несколько раз, пробовал искать в Google, но нет полезного руководства, а также нет последних книг, только книги, написанные в 2004, 2005, 2006 годах. Может ли кто-нибудь помочь в этом или порекомендовать мне полезные ресурсы для изучения это подробно.

Отчаянно жду ответов, очень нужна помощь. Спасибо.

6
задан Pamy 23 February 2012 в 06:58
поделиться