因此,我使用下面的代码来应用笔画(并填充)在UILabel中进行文本处理,它的结果就像下面的图像一样。笔划一边比另一边重(看字母的顶部与底部相比,右边与左边相比)。最后的句号让它看起来也很明显,就像一只谷歌眼)。我根本没有打开任何阴影,所以我不认为是阴影干扰了中风。
是什么导致了这一切?
- (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中给它涂上了颜色一样。关闭填充,然而,只显示中风,这看起来没有比任何其他方面更重。**这使我相信,问题在于填充相对于笔划的位置,而且填充或笔画本身都不是错误的。对这件事还有什么想法吗?怎样才能使填充直接以笔划为中心?
发布于 2013-04-08 10:40:50
您可能应该使用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];或者,你可以只是中风之后。笔画通常是从中间画出来的,这意味着一半的宽度是向内的,一半是向外的。这就意味着,如果你在中风后填写,其中一些笔划会被填充所掩盖。
发布于 2013-04-08 08:42:43
一种可能的情况是,重写的方法使用CGContextTranslateCTM或类似的函数来转换CTM。CTM是上下文状态的一部分,并为以下所有抽签调用指定转换。
您应该尝试在调用重写的方法之前保存上下文,然后恢复它:
CGContextSaveGState(c);
[super drawTextInRect: rect];
CGContextRestoreGState(c);https://stackoverflow.com/questions/15838844
复制相似问题