gpt4 book ai didi

ios - 设置背景颜色弄乱了drawRect

转载 作者:行者123 更新时间:2023-11-29 02:37:48 27 4
gpt4 key购买 nike

所以我制作了一个自定义 UIView,我可以在其中根据游戏中发生的事情绘制线条,并且一切似乎都正常工作(每次调用 drawRect: 时,它附加划到 View 上)

//Initialization
DrawView* draw = [[DrawView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];


//And the drawRect method:
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();

CGColorRef r = [self.lineColor CGColor];

CGContextSetStrokeColor(c, CGColorGetComponents(r));
CGContextBeginPath(c);
CGContextMoveToPoint(c, self.start.x, self.start.y);
CGContextAddLineToPoint(c, self.finish.x, self.finish.y);
CGContextStrokePath(c);
}

但是,我注意到我忘记将背景设为清晰,以免遮挡 View 的背景。但是,一旦我在初始化时设置了背景颜色,drawRect 方法现在就会在每次调用drawRect 时重置上下文。

DrawView* draw = [[DrawView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[draw setBackgroundColor: [UIColor clearColor]];

我想在每次调用drawRect时将笔画添加到上下文中,而不是清除它然后绘制,但我还需要 View 的背景颜色清晰。

我在这里做错了什么?

最佳答案

将我的评论总结成一个答案:

drawRect: 必须重新绘制所有内容。它不是为了每次都简单地添加一个新行而设计的。您的代码无法正常工作,因为它不是每次都绘制所有线条。

您需要跟踪数组或其他一些适当数据结构中的每一行。然后您的 drawRect: 方法应该在每次调用时绘制每条线。

这将使背景颜色按预期工作。

这还有一个好处,就是你可以用你的行数组做更多的事情。您可以提供撤消/重做支持、缩放、旋转等。

另一种选择是使用 UIBezierPath 而不是保留行数组。您可以更新路径并在 drawRect: 方法中呈现它。

以及以下几行:

CGColorRef r = [self.lineColor CGColor];
CGContextSetStrokeColor(c, CGColorGetComponents(r));

可以替换为:

[self.lineColor setStroke];

关于ios - 设置背景颜色弄乱了drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153812/

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