2011-11-04 2 views
3

다음 코드를 사용하여 CoreText로 텍스트 단락을 포맷합니다.단락 CoreText로 자리 맞추기

(...) 

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, 
             [self.fontSize floatValue], NULL); 

CTTextAlignment alignment = kCTJustifiedTextAlignment; 

CTParagraphStyleSetting settings[]={ 
    {kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment}, 
}; 

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, 
              sizeof(settings)/sizeof(settings[0])); 

self.attrs = [NSDictionary dictionaryWithObjectsAndKeys: 
     //The following line doesn't work! 
     (id)paragraphStyle, kCTParagraphStyleAttributeName, 
     (id)self.color.CGColor, kCTForegroundColorAttributeName, 
     (id)fontRef, kCTFontAttributeName, 
     nil]; 

CFRelease(fontRef); 
CFRelease(paragraphStyle); 

NSMutableAttributedString* aString = [[[NSMutableAttributedString alloc] initWithString:@""] autorelease]; 

(...) 

[aString appendAttributedString:[[[NSAttributedString alloc] initWithString:text attributes:attrs] autorelease]]; 

다음 속성 쌍 (값/키)을 제거하면 모든 것이 작동합니다 (색상, 글꼴 등). I는 attrs에 사전에이 특성을 넣으면

(id)paragraphStyle, (NSString*)kCTParagraphStyleAttributeName, 

, 프로그램 난 CTFrameGetVisibleStringRange를 사용하여 무한 루프에 들어간다.

내가 뭘 잘못하고있어?


업데이트 : 코드가 문제가 아니라는 것을 알아 냈 마티아스 응답 후. 텍스트의 일부분 (쓰레기)에서 잃어버린 일부 HTML 태그가 있었고 어떤 이유로 FrameSetter가 손실되어 반환되고 빈 범위를 벗어났습니다. 텍스트에 HTML 태그가 없으면 모든 것이 잘되었습니다.

답변

3

어떤 이유에서 CTParagraphStyleCreateNULL을 반환한다고 의심되어 dictionaryWithObjectsAndKeys:이 빈 사전을 생성합니다. 그러나 단락 스타일 설정에 어떤 오류도 보이지 않습니다.

단락 스타일 설정을 사용하는 내 CoreTextLabel.m 클래스 소스를 살펴보십시오.

+0

감사합니다. 코드를 볼 것입니다. 중단 점을 넣었으며 'CTParagraphStyleCreate'는 NULL이 아닌 값을 반환합니다. – javsmo

+0

그 줄을 활성화하면'CTFrameGetVisibleStringRange'는'CTFrame : visible string range = (14058, 0)'를 반환합니다. 이것은 길이가 0 인 빈 범위입니다. 이것은 표시되는 열을 처리하기 위해 frame.length를 textPosition에 추가하기 때문에 무한 루프가 발생합니다. – javsmo

+0

괜찮습니다. 당신은 당신의 본보기를 더 완전하게 만들 수 있습니까? –