आप अपने स्ट्रिंग के बाउंडिंग बॉक्स के आयत को प्राप्त करने के लिए [NSString boundingRectWithSize: विकल्प: विशेषताएँ: संदर्भ:] का उपयोग कर सकते हैं, जो मल्टी-लाइन टेक्स्ट को भी अनुमति देता है। अपने ड्रा पाठ विधि में, निम्न (RECT आयत जहां आप पाठ आकर्षित करने के लिए करना चाहते हैं) कार्य करें:
// 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);
स्रोत
2013-12-10 17:00:07
यह कुछ फोंट के लिए काम नहीं करता। सिर्फ अकादमीएंग्रावेडलेप्लेप्लेन फ़ॉन्ट का उपयोग करके परीक्षण किया गया है, और फ़ॉन्ट – Coolant
नहीं खींचा गया है, लेकिन मैंने रेक्ट आकार की ऊंचाई को मूल सीमा ऊंचाई के रूप में सेट करके इसे काम करने में कामयाब रहा है, बाउंडिंग नहीं है बॉक्स ऊंचाई – Coolant
और क्या यह कई लाइनों के लिए काम करता है ??? – MatterGoal