我有一些文本,我通过一个NSAttributedString(代码如下)绘制到一个固定的框架.目前,我将文本大小编码为16.我的问题是,是否有一种方法可以计算给定帧的文本的最佳拟合大小?
- (void)drawText:(CGContextRef)contextP startX:(float)x startY:(float) y withText:(NSString *)standString { CGContextTranslateCTM(contextP,(bottom-top)*2); CGContextScaleCTM(contextP,1.0,-1.0); CGRect frameText = CGRectMake(1,(right-left)*2,(bottom-top)*2); NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:standString]; [attrString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Helvetica-Bold" size:16.0] range:NSMakeRange(0,attrString.length)]; CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(attrString)); struct CGPath * p = CGPathCreateMutable(); CGPathAddRect(p,NULL,frameText); CTFrameRef frame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0,0),p,NULL); CTFrameDraw(frame,contextP); }
解决方法
我可以看到这样做的唯一方法是运行大小计算的系统然后调整大小并重复,直到找到正确的大小.
即建立一定的尺寸之间的平分算法.
即运行大小10.
太小.
尺寸20.
太小.
尺寸30.
太大.
尺寸25.
太小.
尺寸27.
对,使用大小27.
你甚至可以从数百人开始.
尺码100.太大.尺码50.等等…