所以我使用下面的代码将笔画(和填充)应用到UILabel
中的文本,它就像下图所示。一侧的笔划比另一侧的笔划更重(与底部相比,字母的顶部和左侧相比。右侧的时间段使得它非常明显,看起来像一个googly眼睛)。我根本没有打开任何阴影,所以我认为这不是干扰中风的阴影。
导致这种情况的原因是什么?
- (void) drawTextInRect: (CGRect) rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetTextDrawingMode(c, kCGTextFillStroke);
CGContextSaveGState(c);
CGContextSetRGBFillColor(c, 1.0, 0.0, 0.0, 1.0);
CGContextSetRGBStrokeColor(c, 0.0, 1.0, 0.0, 1.0);
[super drawTextInRect: rect];
CGContextRestoreGState(c);
}
编辑:所以,对于踢球,我只看了标签,只有中风。关闭笔划会创建一个看起来非常正常的文本,就好像我只是在Interface Builder中将其着色一样。然而,关闭填充仅显示行程,其在任何一侧看起来都不比任何其他行程重。 **这让我相信问题是其中填充位置与笔划有关,并且填充或笔划本身都没有错。还有其他想法吗?如何将填充直接置于笔划中心?
答案 0 :(得分:4)
你应该只使用kCGTextFillStroke
作为绘图模式,只绘制一次(设置单独的笔触和填充颜色)。
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); // any color you want (this is red)
CGContextSetRGBStrokeColor(context, 0.0, 1.0, 0.0, 1.0); // any color you want (this is green)
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
[self.text drawInRect:rect withFont:self.font];
或者你可以随后中风。通常从中心抽出笔划,这意味着宽度的一半向内,一半向外。这意味着如果你在中风后填充,那么一些中风将会被填充所掩盖。
答案 1 :(得分:1)
可能是被覆盖的方法使用CGContextTranslateCTM
或类似函数转换CTM。 CTM是上下文状态的一部分,并为所有后续绘制调用指定转换。
您应该在调用重写方法之前尝试保存上下文并在之后恢复它:
CGContextSaveGState(c);
[super drawTextInRect: rect];
CGContextRestoreGState(c);