У меня есть фрагмент кода ниже, который рисует строку в UIView
, используя CoreText
:
- (void) drawRect:(CGRect)rect
{
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)self.text);
CGMutablePathRef mutablePathRef = CGPathCreateMutable();
CGPathAddRect(mutablePathRef, NULL, self.bounds);
CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), mutablePathRef, NULL);
CGFloat frameHeight = [self calculateHeightForFrame: frameRef];
//what do I do here to resposition the mutablePathRef?
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CTFrameDraw(frameRef, context);
CFRelease(frameRef);
CGPathRelease(mutablePathRef);
CFRelease(framesetter);
}
Я инициализирую фрейм и установщик фреймов и прикрепляю их к CGMutablePath
. Затем я использую CTLine
начала координат из рамки, чтобы вычислить высоту текста, чтобы я мог центрировать его по вертикали.
После этого я немного озадачен. Есть ли способ переместить положение CGMutablePath
в новое начало, чтобы оно было отцентрировано по вертикали? Я попытался CGPathMoveToPoint
, и это не сработало.
Или мне нужно создать совершенно новую CGMutablePath
и совершенно новую программу установки кадров? Если так, как я могу удалить CGMutablePath
? Будет ли он удален, если я его отпущу?
Любые намеки на эффективный способ, которым я мог бы решить это, было бы замечательно, спасибо.