NSString 크기 캡처 구멍
sizeWithAttributes sizeWithAttributes
정확한 크기를 얻을 수 없습니다.
문자열에 지정한 글꼴에 없는 것이 포함되어 있으면 sizeWithAttributes
정확한 크기를 얻을 수 없습니다.
예를 들어, 등가 배율 글꼴 "Courier"에는 일본어가 포함되지 않습니다.
글꼴에 "Courier"가 지정되어 있으면 문자열에 일본어가 포함되어 있으며 sizeWithAttributes
원래 크기는 반환되지 않습니다.
iOS에서 부족한 부분은 다른 글꼴로 대체하고 문자가 표시되지 않습니다
언뜻 보기에는 어려움이 없지만 상술한 함정에 주의하세요.
이 경우 CoreText도 정확한 크기를 얻을 수 있습니다.
크기 비교 읽어들이기NSString *text = @"チ";
// 文字装飾
NSMutableDictionary *dictAttr = [NSMutableDictionary dictionary];
[dictAttr setObject:[UIFont fontWithName:@"Courier" size:64.0] forKey:NSFontAttributeName];
/* ********************
* sizeWithAttributesでサイズ取得
******************** */
// サイズ取得
CGSize sizeFont = [text sizeWithAttributes:dictAttr];
// ログ出力
NSLog(@"sizeWith~:%@", NSStringFromCGSize(sizeFont));
/* ********************
* CoreTextでサイズ取得
******************** */
// 装飾文字列の生成
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:text attributes:dictAttr];
//フレームセッターの作成
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attrStr);
// サイズ取得
CGSize contentSize = CTFramesetterSuggestFrameSizeWithConstraints(
framesetter,
CFRangeMake(0, attrStr.length),
nil,
CGSizeMake(200, 200),
nil);
// ログ出力
NSLog(@"CoreText:%@", NSStringFromCGSize(contentSize));
출력 로그sizeWith~:{64, 64}
CoreText:{64, 71}
이렇게 하면 size With Attributes의 세로 폭이 작아진다.
drawInRect
이 문제는 drawInRect에서도 확인할 수 있습니다.
draw InRect는 size With Attributes와 같은 인식에 근거하여 묘사의 원점으로?
위 텍스트 그리기CGRect rectImage = CGRectMake(0, 0, 96.0, 96.0);
// 画像処理開始
UIGraphicsBeginImageContextWithOptions(rectImage.size, NO, 0.0);
// テキストの描画
[text drawInRect:rectImage withAttributes:dictAttr];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
// 画像処理終了
UIGraphicsEndImageContext();
64x64의 경우 96x96여분의 충분한 양을 가지고 있어도 칼의 상부에 약간의 결함이 있을 수 있다.
원래 64x71에 있는 곳이에요.drawInRect
64x64로 오인하여 원점이 벗어났다고 여긴다.drawInRect
의 y축이 약간 편이되어 상부도 그려진다
총결산
나는 일본어가 포함되지 않은 글씨체의 사용이 결코 희귀하지 않다고 생각한다.
매번 CoreText가 좀 귀찮은 일이라는 것을 깨달아야 한다.
Reference
이 문제에 관하여(NSString 크기 캡처 구멍), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ponkichi4/items/371facbce731bedea304
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
NSString *text = @"チ";
// 文字装飾
NSMutableDictionary *dictAttr = [NSMutableDictionary dictionary];
[dictAttr setObject:[UIFont fontWithName:@"Courier" size:64.0] forKey:NSFontAttributeName];
/* ********************
* sizeWithAttributesでサイズ取得
******************** */
// サイズ取得
CGSize sizeFont = [text sizeWithAttributes:dictAttr];
// ログ出力
NSLog(@"sizeWith~:%@", NSStringFromCGSize(sizeFont));
/* ********************
* CoreTextでサイズ取得
******************** */
// 装飾文字列の生成
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:text attributes:dictAttr];
//フレームセッターの作成
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attrStr);
// サイズ取得
CGSize contentSize = CTFramesetterSuggestFrameSizeWithConstraints(
framesetter,
CFRangeMake(0, attrStr.length),
nil,
CGSizeMake(200, 200),
nil);
// ログ出力
NSLog(@"CoreText:%@", NSStringFromCGSize(contentSize));
sizeWith~:{64, 64}
CoreText:{64, 71}
이 문제는 drawInRect에서도 확인할 수 있습니다.
draw InRect는 size With Attributes와 같은 인식에 근거하여 묘사의 원점으로?
위 텍스트 그리기
CGRect rectImage = CGRectMake(0, 0, 96.0, 96.0);
// 画像処理開始
UIGraphicsBeginImageContextWithOptions(rectImage.size, NO, 0.0);
// テキストの描画
[text drawInRect:rectImage withAttributes:dictAttr];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
// 画像処理終了
UIGraphicsEndImageContext();
64x64의 경우 96x96여분의 충분한 양을 가지고 있어도 칼의 상부에 약간의 결함이 있을 수 있다.
원래 64x71에 있는 곳이에요.
drawInRect
64x64로 오인하여 원점이 벗어났다고 여긴다.drawInRect
의 y축이 약간 편이되어 상부도 그려진다총결산
나는 일본어가 포함되지 않은 글씨체의 사용이 결코 희귀하지 않다고 생각한다.
매번 CoreText가 좀 귀찮은 일이라는 것을 깨달아야 한다.
Reference
이 문제에 관하여(NSString 크기 캡처 구멍), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ponkichi4/items/371facbce731bedea304
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(NSString 크기 캡처 구멍), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ponkichi4/items/371facbce731bedea304텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)