gpt4 book ai didi

ios - uiview 子类在第一次调用 setneedsdisplay 时显示为黑色矩形,但在那之后就可以了

转载 作者:行者123 更新时间:2023-12-01 19:12:06 25 4
gpt4 key购买 nike

我有一个覆盖 drawrect 的自定义 UIView 子类。 View 从数据源获取数据,并将其中的一些信息传递给它的委托(delegate) View Controller ,以将其处理成需要绘制的字符串。第一次调用 setneedsdisplay 时, View 显示为黑色矩形,但如果第二次调用它就可以正常工作。所有的帧大小和位置都已正确设置,因此我确信代理和数据源从一开始就已正确设置。这是有问题的drawrect代码:

- (void)drawRect:(CGRect)rect
{

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, 2.0);
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGFloat components[] = {0, 0, 0, 1.0};
CGColorRef color = CGColorCreate(colorSpace, components);
;
//CGContextStrokeRect(context, CGRectMake(1, 1, self.frame.size.width-1.0, self.frame.size.height-1.0));

CGContextMoveToPoint(context, 0, [_delegate denominatorPoint:self].y);
if ([_delegate numeratorBiggerThanDenominator:self]==YES)
CGContextAddLineToPoint(context,[[_delegate numeratorString:self]sizeWithFont:[_delegate fontToDrawWith:self]].width , [_delegate denominatorPoint:self].y);
else
CGContextAddLineToPoint(context,[[_delegate denominatorString:self]sizeWithFont:[_delegate fontToDrawWith:self]].width , [_delegate denominatorPoint:self].y);
if ([_delegate hasAFraction:self]==YES) {


CGContextSetStrokeColorWithColor(context, color);


CGContextStrokePath(context);

}

CGColorSpaceRelease(colorSpace);
CGColorRelease(color);



self.backgroundColor=[UIColor clearColor];


[[_delegate numeratorString:self] drawAtPoint:[_delegate numeratorPoint:self] withFont:[_delegate fontToDrawWith:self]];
NSLog([_delegate numeratorString:self]);
if ([_delegate hasAFraction:self]==YES)
[[_delegate denominatorString:self] drawAtPoint:[_delegate denominatorPoint:self] withFont:[_delegate fontToDrawWith:self]];
[[_delegate Variable:self] drawAtPoint:[_delegate variablePoint:self] withFont:[_delegate fontToDrawWith:self]];
if ([_delegate hasAParenthesTerm:self]==YES) {
//NSLog(@"parentheses being drawn");
NSString* openParentheses=@" (";
[openParentheses drawAtPoint:[_delegate openParenthesesPoint:self] withFont:[_delegate fontToDrawWith:self]];
NSString* closedParentheses=@")";
[closedParentheses drawAtPoint:[_delegate closeParenthesesPoint:self] withFont:[_delegate fontToDrawWith:self]];
}

}

让我知道是否有其他代码可以帮助解决这个问题。

最佳答案

你试过搬家吗self.backgroundColor = [UIColor clearColor];到init方法?

无论如何,您应该只需要运行该行一次,我可以想象在 draw 方法的中间调用它可能会导致问题(并且在第二次调用 drawRect 时,backgroundColor 已经设置为 clearColor,所以UIView 可以忽略它,使您的问题在第二个 setNeedsDisplay 调用中消失)

关于ios - uiview 子类在第一次调用 setneedsdisplay 时显示为黑色矩形,但在那之后就可以了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com