Я пытаюсь найти максимальный размер шрифта, который будет вписываться в данный прямоугольник для данной строки. Цель алгоритма состоит в том, чтобы заполнить как можно больше прямоугольника как можно большим шрифтом. Мой подход, который изменяется от одного, который я нашел в Интернете, выполняет справедливую работу, но часто не заполняет весь прямоугольник. Я хотел бы видеть некоторое сотрудничество о том, как улучшить этот алгоритм так, чтобы каждый мог извлечь из этого пользу:Рассчитать максимальный размер шрифта, который подходит в прямоугольнике?
-(float) maxFontSizeThatFitsForString:(NSString*)_string
inRect:(CGRect)rect
withFont:(NSString *)fontName
onDevice:(int)device
{
// this is the maximum size font that will fit on the device
float _fontSize = maxFontSize;
float widthTweak;
// how much to change the font each iteration. smaller
// numbers will come closer to an exact match at the
// expense of increasing the number of iterations.
float fontDelta = 2.0;
// sometimes sizeWithFont will break up a word
// if the tweak is not applied. also note that
// this should probably take into account the
// font being used -- some fonts work better
// than others using sizeWithFont.
if(device == IPAD)
widthTweak = 0.2;
else
widthTweak = 0.2;
CGSize tallerSize =
CGSizeMake(rect.size.width-(rect.size.width*widthTweak), 100000);
CGSize stringSize =
[_string sizeWithFont:[UIFont fontWithName:fontName size:_fontSize]
constrainedToSize:tallerSize];
while (stringSize.height >= rect.size.height)
{
_fontSize -= fontDelta;
stringSize = [_string sizeWithFont:[UIFont fontWithName:fontName
size:_fontSize]
constrainedToSize:tallerSize];
}
return _fontSize;
}
Когда вы говорите «заполните весь прямоугольник», вы имеете в виду только по горизонтали? – Magnus