Использование нескольких CGAffineTransforms на текстовой матрице
Я показываю текст с помощью Quartz. Вот мой код:
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGContextSelectFont(myContext, "Helvetica", 12, kCGEncodingMacRoman);
CGContextSetCharacterSpacing(myContext, 8);
CGContextSetTextDrawingMode(myContext, kCGTextFillStroke);
CGContextSetRGBFillColor(myContext, 0, 0, 0, 1);
CGContextSetRGBStrokeColor(myContext, 0, 0, 0, 1);
CGContextSetTextMatrix(myContext,CGAffineTransformMake(1, 0, 0, -1, 0, 0));
CGContextShowTextAtPoint(myContext, textOrigin.x, textOrigin.y,[way.name UTF8String],[way.name length]);
Это отображает мой текст в правильном направлении вверх и в правильном направлении, однако мне также нужно добавить поворот к тексту с помощью CGAffineTransformMakeRotation(angle);
. Кажется, я не могу понять, как аппроксимировать два аффинных преобразования в текстовую матрицу, хотя и не переписывать другую. Любая помощь будет отличной.
Ответы
Ответ 1
Вы можете комбинировать матрицы с CGAffineTransformConcat, например
CGAffineTransform finalTransf = CGAffineTransformConcat(t1, t2);
Если вам просто нужно применить поворот к существующей матрице, используйте CGAffineTransformRotate, например
CGAffineTransform t = CGAffineTransformMake(1, 0, 0, -1, 0, 0);
CGAffineTransform t = CGAffineTransformRotate(t, M_PI/2);
CGContextSetTextMatrix(myContext, t);
Ответ 2
Чтобы добавить ответ @kennytm, чтобы применить более двух преобразований, вы можете сделать следующее:
var t = CGAffineTransformIdentity
t = CGAffineTransformTranslate(t, CGFloat(100), CGFloat(300))
t = CGAffineTransformRotate(t, CGFloat(M_PI_4))
t = CGAffineTransformScale(t, CGFloat(-1), CGFloat(2))
// ... add as many as you want, then apply it to to the view
imageView.transform = t
Перейдите сюда, чтобы увидеть мой полный ответ.