2012-02-23 2 views
5

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

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


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

Quartz 2d графики для Mac OS X разработчик книги говорит:

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

Я не получил эту точку жирным шрифтом.

И

Quartz 2D programming guide говорит:

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

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

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

Я пытаюсь выполнить разные эксперименты, но не могу обернуть вокруг себя эту фигуру. Я создаю изображение, которое рисует две линии, реплицируя нижнюю левую систему координат в Photoshop, а затем добавляется в мой проект, чтобы видеть, как ведут себя координаты, вызывая 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); 

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


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

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

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

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

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

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

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

ответ

0

Вы используете подкласс UIImageView и переопределяете drawRect? Это не поддерживается (см. Документы), и, вероятно, почему ваши изображения не подвержены изменениям.

Если вы хотите, чтобы сделать много преобразований и заказной кода рисования, то вы должны использовать UIView подкласс и рисование изображения вручную с помощью CGContextDrawImage()

Любых преобразований применяются к операции рисования сделано после преобразования. Вы увидите образцы кода в документах, в которых сохраняется состояние графики, применяется преобразование, выполняется какой-то рисунок, а затем восстанавливается контекст. Вот как вы рисуете некоторые компоненты, а некоторые нет.

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

+0

Я использую UIView подкласс и в DrawRect я пишу весь код. просто хочу увидеть видимое поведение координат и преобразований, поэтому я добавляю изображение, нарисованное двумя строками, представляющими нижние левые координаты, которые являются кварцем 2d по умолчанию. В xib-файле я помещаю это изображение в uiimage. Я изменяю это представление не uiimage с подкласса, в котором я делаю весь код, поэтому весь вид является подклассом класса draw2d, который я создал. Спасибо за ответ. – Pamy

+0

Что вы подразумеваете под «в xib-файле, я помещаю изображение в UIImage»? Я читал, что это ваш вопрос, поскольку вы делаете uiimageview, так как вы не можете создать UIImage в xib-файле. Я не понимаю, как вы это настроили, можете ли вы поставить некоторые скриншоты в свой вопрос? – jrturton

+0

Я снял и отбросил uiimageview, и в этом я установил изображение координаты и ничего не сделал, после этого и написав код преобразования, все, что я ожидал, что изображение также будет вращаться, и я буду видеть, где координаты теперь я могу понять код очень легко. – Pamy

Смежные вопросы