Sie können [NSString boundingRectWithSize: options: attributes: context:] verwenden, um das Rechteck der Begrenzungsbox Ihrer Zeichenkette zu erhalten, das auch mehrzeiligen Text zulässt. In Ihrem Draw Text Verfahren Sie wie folgt vor (RECT das Rechteck ist, wo Sie den Text zeichnen möchten):
// get the graphics context
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
// flip the context coordinate
CGContextTranslateCTM(context, 0.0f, 2*RECT.origin.y+RECT.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
// Set the text matrix.
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
// set text horizontal alignment
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentCenter;
NSDictionary *attributes = @{NSParagraphStyleAttributeName:paragraphStyle, NSFontAttributeName:YOUR_FONT, NSForegroundColorAttributeName:TEXT_COLOR};
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:YOUR_TEXT attributes:attributes];
CGMutablePathRef path = CGPathCreateMutable();
// set text vertical alignment
CGSize textSize = [text boundingRectWithSize:RECT.size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
CGPathAddRect(path, NULL, CGRectMake(RECT.origin.x, RECT.origin.y-(RECT.size.height-textSize.height)/2.0f, RECT.size.width, RECT.size.height));
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, attrString.length), path, NULL);
CTFrameDraw(frame, context);
CFRelease(frame);
CFRelease(path);
CFRelease(frameSetter);
[attrString release];
[paragraphStyle release];
CGContextRestoreGState(context);
Dies funktioniert nicht für einige Schriftarten. Gerade getestet mit der AcademyEngravedLetPlain Schriftart, und die Schrift wird nicht gezeichnet – Coolant
Aber ich habe es geschafft, es auszuarbeiten, indem Sie die rect Größe Höhe als die ursprüngliche Grenzen Höhe, nicht die BoundingBox Höhe – Coolant
und funktioniert es für mehrere Zeilen? – MatterGoal