मैं यह कर समाप्त हो गया:
textlayer
एक CATextlayer
theString
एक NSMutableAttributedString
है और हाँ, यह बहुत ही सुंदर नहीं है और निश्चित रूप से सुधार किया जा सकता;)
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theString);
CGRect columnRect = CGRectMake(0, 0 , 320, 150);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, columnRect);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRange frameRange = CTFrameGetVisibleStringRange(frame);
int fontSize = 18;
while(theString.string.length > frameRange.length){
fontSize--;
CFStringRef fontName = (__bridge CFStringRef)[defs objectForKey:@"font"];
CTFontRef font = CTFontCreateWithName(fontName, fontSize, NULL);
[theString addAttribute:(NSString *)kCTFontAttributeName
value:(__bridge id)font
range:NSMakeRange(0, theString.string.length)];
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theString);
CGRect columnRect = CGRectMake(0, 0 , 320, 150);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, columnRect);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
frameRange = CTFrameGetVisibleStringRange(frame);
textLayer.string = theString;
}
काम करेंगे होगा जब आप कहते हैं कि 'एक अज्ञात लंबाई के पाठ', आप संकलन समय पर नहीं जाना जाता है मतलब हैं? किसी बिंदु पर, आपको * लंबाई * पता होना चाहिए ... – nall
हाहा - ठीक है, अच्छा बिंदु। यह टेक्स्ट है जिसे उपयोगकर्ता द्वारा किसी बिंदु पर दर्ज किया गया है। बेशक, मैं स्ट्रिंग-लम्बाई प्राप्त कर सकता हूं ... :) – Swissdude