特定のフォント タイプとフォント サイズの文字のテクスチャをキャッシュしたいのですが、Unicode 文字セット全体で最大の文字が使用できる最大サイズを確認できません。
このサイズはどのように計算できますか?
探しているのは、Font Bounding Box (または BBox) です。iOS では、CGFontRef が必要になり、関数を使用できます。
CGRect CGFontGetFontBBox (
CGFontRef font
);
これは、フォント内のすべてのグリフ境界ボックスの和集合であるフォント境界ボックスを返します。グリフ単位で値を返します。
さて、あなたはsizeWithFontを使うことができます:
最大の(または最も高いまたは最大の面積)をチェックします
幅と面積ではうまく機能しますが、すべての文字の高さがドット "." であっても同じようです。
とにかく、そのようなものがあなたの質問に答えるはずだと思います:
UIFont* aFont = [UIFont fontWithName:@"HelveticaNeue" size:15];
NSString* charsToTest = @"abcdf...xyz, ABCD...XYZ, 0123...";
float maxArea = 0;
float maxWidth = 0;
float maxHeight = 0;
NSString* largerChar;
NSString* tallerChar;
NSString* biggerChar;
for (int i = 0; i<charsToTest.length; i++) {
NSRange currentRange;
currentRange.length = 1;
currentRange.location = i;
NSString* currentCharToTest = [charsToTest substringWithRange:currentRange];
CGSize currentSize = [currentCharToTest sizeWithFont:aFont];
if (currentSize.width > maxWidth) {
maxWidth = currentSize.width;
largerChar = currentCharToTest;
NSLog(@"char:%@, new record width: %f", largerChar, maxWidth);
}
if (currentSize.height > maxHeight) {
maxHeight = currentSize.height;
tallerChar = currentCharToTest;
NSLog(@"char:%@, new record height:%f", tallerChar, maxHeight);
}
float currentArea = currentSize.height * currentSize.width;
if ( currentArea > maxArea) {
maxArea = currentArea;
biggerChar = currentCharToTest;
NSLog(@"char:%@, new area record: %f", biggerChar, maxArea);
}
}
// final resut:
NSLog(@"\n\n");
NSLog(@"char:%@ --> MAX WIDTH IS: %f", largerChar, maxWidth);
NSLog(@"char:%@ --> MAX HEIGHT IS: %f", tallerChar, maxHeight);
NSLog(@"char:%@ --> MAX AREA IS: %f\n\n", biggerChar, maxArea);