添加笔划时,文本变为不可见

时间:2013-01-19 12:32:13

标签: ios quartz-graphics core-text

我有下一期(下面的示例代码):
我使用CATextLayerNSAttributedString来显示风格化文字。一切正常,直到我为属性添加笔划。当我添加笔划时 - 文本变得不可见并且在显示中我只能看到笔划。 拜托,我无法理解会发生什么,为什么我不能同时使用文字和笔画? 感谢。

UIFont* font = [UIFont fontWithName: size:];
UIColor* strokeColor = [UIColor colorWithRed: green: blue: alpha:1.f];
UIColor* foregroundColor = [UIColor colorWithRed: green: blue: alpha:1.f];
CTFontDescriptorRef fontDescriptor = CTFontDescriptorCreateWithNameAndSize(...);
CTFontRef ctFont = CTFontCreateWithFontDescriptor(...);

NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                            strokeWidth, kCTStrokeWidthAttributeName,
                            [strokeColor CGColor], kCTStrokeColorAttributeName,
                            ctFont, kCTFontAttributeName,
                            [foregroundColor CGColor], kCTForegroundColorAttributeName,
                            nil];

NSAttributedString* attributedText = 
[[NSAttributedString alloc] initWithString:text attributes:attributes];

CATextLayer* infoTextLayer = [[[CATextLayer alloc] init] autorelease];
infoTextLayer.string = attributedText;
...
infoTextLayer.frame = frame;
[self.layer addSublayer:infoTextLayer];

2 个答案:

答案 0 :(得分:14)

对于文本和笔划,您的strokeWidth必须为负,对于仅笔划,您的strokeWidth必须为正。来自Apple Docs:

  

kCTStrokeWidthAttributeName 。此属性(按字体点大小的百分比解释)控制文本绘制模式:正值仅影响绘图;负值是笔画和填充。

答案 1 :(得分:0)

使用kCGTextFillStroke - 同时填充和描边