Ios UITextView图形文本两次
我正在尝试在UITextViews文本上创建笔划文本。它工作正常,但文本在屏幕上绘制了两次。这是我在UITextView子类中的drawRect方法Ios UITextView图形文本两次,ios,uitextview,Ios,Uitextview,我正在尝试在UITextViews文本上创建笔划文本。它工作正常,但文本在屏幕上绘制了两次。这是我在UITextView子类中的drawRect方法 - (void)drawRect:(CGRect)rect { // Drawing code // Drawing code UIFont *font = [UIFont fontWithName:@"Cochin" size:[_fontSize floatValue]]; CGContextRef cont
- (void)drawRect:(CGRect)rect
{
// Drawing code
// Drawing code
UIFont *font = [UIFont fontWithName:@"Cochin" size:[_fontSize floatValue]];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetShadow(context, CGSizeMake(1, 1), 1);
CGContextSetRGBFillColor(context,1,1,1, 1);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
CGContextSetLineWidth(context, .35);
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextSaveGState(context);
[[self text] drawInRect:rect withFont:font];
}
我尝试将ClearContextOnDraw设置为“是”,但没有成功。请帮忙…我刚刚尝试了你的代码,它确实对我有用。不过有几个注意事项:
self.bounds
作为要绘制的目标rect,而不是您得到的rect
参数,因为它表示“这是视图的无效区域”。这是一种性能优化,您很少需要使用它CGContextSaveGState
(这样做之后,您将需要恢复它)。您通常会在调用实际修改当前上下文(并随后恢复)的子例程时执行此操作,但理想情况下,应该将其移动到例程本身UITextView
。您不应该使用此类进行自定义绘图!如果您想自己绘制文本,请使用子类UIView
。如果要使用UITextView
,请使用UITextView
的attributedString
属性(例如,在UIViewController
子类中设置它)。
以下是有关属性字符串的更多信息:您不应该直接调用drawRect 而不是:
[[self text] drawInRect:rect withFont:font];
尝试:
哦,天哪,文本系统是一个复杂的野兽,有很多很多(大部分是私有的)类、方法和数据结构 您有NSTextStorage、NSLayoutManager、NSTextContainer和UITextView作为公共类。为了更好地度量,请加入UITextRange和UITextPosition。在Mac OS X上,您也有排版器类 虽然UITextView要求NSLayoutManager在某些rect区域中绘制文本(通过专用方法而不是drawRect),但绘制本身实际上是由NSLayoutManager完成的。如果您想自己绘制文本,则必须提供自己的NSLayoutManager子类
使用NSLayoutManager子类作为最后手段。可以使用自定义uiview自己绘制框架和文本,也可以使用uitextview尝试找出系统绘制文本的方式。您需要使用NSLayoutManager方法。绘制框架,而不是uitextview类的drawRect中的文本。我使用此方法来避免此问题登月舱
- (void)drawRect:(CGRect)rect{
//YOUR Drawing code here ...
self.textColor = [UIColor clearColor];
}
请注意,他不是直接调用
UIView
的方法drawRect
,而是调用NSString
的drawInRect
,这是不同的,完全没有问题。这不起作用。它仍然会绘制两次文本视图。第一次在drawRect中执行自定义绘图代码。除此之外,它还会从文本中绘制文本tview及其默认值。我将颜色设置为“clear color”并解决了此问题,但这似乎是一个黑客作业。我的问题是如何使drawRect停止uitextview的默认渲染?这是我问题的图像。背景中的暗层是drawRect自定义图形。前面的黑色层是ui的标准图形你找到解决方案了吗?我也遇到了同样的问题
- (void)drawRect:(CGRect)rect{
//YOUR Drawing code here ...
self.textColor = [UIColor clearColor];
}