2014-03-25 1 views
4

저는 UILabel (iOS7)에서 글꼴을 사용하고 있는데 누군가가 설명 할 수 있기를 바라고 있습니다 : 글꼴의 글리프, 어센더 및 디펜더의 관계는 무엇입니까?iOS의 Glyph Ascender 글꼴과 Descender 글꼴 간의 관계는 무엇입니까?

내가 읽은 문서에서 Ascender는 기준선 위의 글꼴 부분이며, Descender는 아래 부분 (음수로 반환 됨)입니다. 결합 된 절대 값은 글꼴의 최대 높이이어야합니다. 글리프 높이 228.4

EDIT로 반환하지만 255 센더와 -64의 센더는 319 총 높이를 줄 것이다 예를 들어

From Apple's documentation

: 여기 글리프 코드는 :

float adHeight = myLabel.font.ascender-myLabel.font.descender; //Descender is always a negative value 
:
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)(uiFont.fontName), uiFont.pointSize, NULL); 
UniChar ch = [msgLabel.text characterAtIndex:0]; 
CGGlyph glyph; 
if (CTFontGetGlyphsForCharacters (ctFont, &ch, &glyph, 1)) { 
    CGRect bounds = CTFontGetBoundingRectsForGlyphs (ctFont, kCTFontOrientationDefault, &glyph, nil, 1); 
    float glyphHeight = bounds.size.height; 
} 

그리고 여기가 어 센더/센더 코드입니다

왜 CTFontGetBoundingRectsForGlyphs에서 반환 된 Glyph 높이가 Ascender plus Descender와 같지 않은가?

+0

글리프 높이는 어떻게 받고 있습니까? 어쩌면 코드를 보여줄 수 있을까요? – hooleyhoop

+0

확인 - 일부 코드를 추가했습니다 ... – wayneh

답변

1

글꼴의 모든 글자 (글자 모양)는 크기와 모양이 다릅니다. 맞습니까? 문자 'A'의 글리프가 문자 'a'의 글리프보다 높을 경우 't'글리프의 상단이 다시 달라집니다.

Font.ascender는 모든 문자 모양 (글리프)의 최대 값이며 Font.descender는 최소값입니다.

특정 글꼴은 Font.ascender 값이 해당 문자가 포함되지 않은 문자열의 차원과 아무런 관련이 없다는 것을 의미하는 키가 큰 글리프를 쉽게 가질 수 있습니다.

+0

duh! 따라서 ... GetGlyphs ... 함수는 단일 문자 '& ch'의 높이를 반환하는 반면 '.ascender'또는 '.descender'는 전체 글꼴의 최대/최소값입니다. 즉, 'T'의 문양은 오름차순 자와 같아야하지만 'a'또는 'j'의 같지 않음을 의미합니다. ascender의 최대 높이와 ​​descender의 최소 높이를 모두 충족시키는 문자가 하나도 없기 때문에 Glyph 값을 ascender + descender 또는 글꼴 높이와 일치시키지 못합니다. – wayneh

+0

배열을 공급할 수 있습니다 ... GetGlyph ... ascender + descender ...와 같은 값을 반환하는 "Tj"가 포함되어 있습니다. – wayneh

+0

예 ascender는 최대 높이입니다. 이 글꼴은 'T'의 맨 위에 올 것 같지 않습니다. 글꼴에는 아이콘, 로고, 한자 등이 포함되어있을 것입니다. CTFontGetBoundingRectsForGlyphs의 정의를 보면 문자 배열을 AC 배열로 전달하고 AC 바운딩 rects의 배열 - 그럼에도 불구하고 좋은 하나입니다. – hooleyhoop

관련 문제