2013-05-13 1 views
0

Я рисую серию UIBezierPath, все из которых имеют разные размеры и местоположения. Я хотел бы масштабировать каждую фигуру до определенного размера и перемещать ее в определенное место на UIView. Я сейчас работаю с CGAffineTransformation. Он быстро становится грязным, поскольку местоположение и размер не работают для всех фигур.Динамически масштабировать и переводить форму

Можно ли каким-либо образом масштабировать UIBezierPath до определенного размера и переводить (переместить) его в определенное место, которое будет работать для большинства фигур? Может быть, есть способ установить размер и расположение фигуры без необходимости использования преобразований, о которых я не знаю? Формы, которые я рисую, очень разные по размеру, некоторые с зубчатыми краями.

Это то, что я делаю до сих пор с помощью своих AffineTransformations.

CGAffineTransform scale = CGAffineTransformMakeScale(2.0f,2.0f); 
[path applyTransform:scale]; 

CGAffineTransform move = CGAffineTransformMakeTranslation(-10, -10); 
[path applyTransform:move]; 

Где path является UIBezierPath.

Верно ли это? Значения, которые я использую (-10, 2.0f), являются просто примерами.

ответ

0

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

myCAShapeLayer.path = myUIBezierPath.path; 
myCAShapeLayer.position = CGRectMake(x, y); 

CALayers are awesome!

0

Что вы ищете, так это как применить аффинное преобразование к пути безье. Конечно, вы можете, с помощью этого метода:

- (void)applyTransform:(CGAffineTransform)transform; 

Это как определяется структура:

struct CGAffineTransform { 
    CGFloat a; 
    CGFloat b; 
    CGFloat c; 
    CGFloat d; 
    CGFloat tx; 
    CGFloat ty; 
}; 
typedef struct CGAffineTransform CGAffineTransform; 

И поля Значение:

Поля

Введенное положение [1,1] в матрице.
b
Запись в позиции [1,2] в матрице.
c
Запись в позиции [2,1] в матрице.
d
Запись в позиции [2,2] в матрице.
tx
Запись в позиции [3,1] в матрице.
ty
Запись в позиции [3,2] в матрице.

Ссылка:

CGAffineTransform
UIBezierPath

+0

Я упомянул в оригинальной публикации, что я сейчас работаю с AffineTransformations и что они не очень хорошо работают. Если вы считаете, что это то, что я должен делать, можете ли вы дать более подробное объяснение того, как я должен применять трансформацию? – tentmaking

+0

Обратите внимание, что вы добавили код после ответа на свой вопрос. Этот код должен быть правильным, тогда, если он не работает, вы делаете что-то неправильно в другой части кода. Покажите полный код, если есть еще какое-то нежелательное поведение. –

+0

Я добавил код после ответа на вопрос, но я изначально упомянул, что использовал CGAffineTransformations. В любом случае, я нашел решение и опубликую его в ближайшее время. – tentmaking

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

  • Нет связанных вопросов^_^