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]];
如果我删除以下属性对(值/键),一切正常(颜色,字体等)。
(id)paragraphStyle, (NSString*)kCTParagraphStyleAttributeName,
如果我把ATTRS字典此属性,程序上,当我使用CTFrameGetVisibleStringRange一个无限循环进入。
我在做什么错了?
UPDATE:马蒂亚斯答案后,我想通了,该代码是没有问题的。在文本中间丢失了一些HTML标签(垃圾),出于某种原因,FrameSetter正在消失,返回并返回空的范围。当文字上没有HTML标签时,一切都很顺利。
谢谢,我会看到你的代码。我把一个断点和'CTParagraphStyleCreate'返回一个值,而不是NULL。 – javsmo
我刚刚注意到,当我启用该行时,'CTFrameGetVisibleStringRange'返回'CTFrame:visible string range =(14058,0)'。这是一个空的范围,因为长度== 0.这导致无限循环,因为我将frame.length添加到textPosition以处理可见列。 – javsmo
嗯好的。你能否让你的例子更完整? –